diff --git a/fern/pages/changelogs/csharp-sdk/2025-03-10.mdx b/fern/pages/changelogs/csharp-sdk/2025-03-10.mdx new file mode 100644 index 00000000000..8060773febf --- /dev/null +++ b/fern/pages/changelogs/csharp-sdk/2025-03-10.mdx @@ -0,0 +1,10 @@ +## 1.12.0-rc18 +**`(fix):`** Make the behavior between a wrapped request with body properties and normal body request consistent. +Previously, a wrapped request with body properties would not omit `null` values even if the JSON configuration is configured to omit `null` values. + + +**`(fix):`** Fix a bug where required properties that were `[JsonIgnore]` threw an error during serialization. + + +**`(feat):`** Improve performance of query string value to string conversion by relying less on `JsonSerializer` and more on `ToString()`. + diff --git a/fern/pages/changelogs/ts-express/2025-03-09.mdx b/fern/pages/changelogs/ts-express/2025-03-10.mdx similarity index 100% rename from fern/pages/changelogs/ts-express/2025-03-09.mdx rename to fern/pages/changelogs/ts-express/2025-03-10.mdx diff --git a/generators/csharp/codegen/src/asIs/JsonConfiguration.Template.cs b/generators/csharp/codegen/src/asIs/JsonConfiguration.Template.cs index 1b8e112db25..b56819ceb94 100644 --- a/generators/csharp/codegen/src/asIs/JsonConfiguration.Template.cs +++ b/generators/csharp/codegen/src/asIs/JsonConfiguration.Template.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace <%= namespace%>; @@ -60,6 +61,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -74,7 +88,8 @@ static JsonOptions() internal static class JsonUtils { - internal static string Serialize(T obj) => JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); + internal static string Serialize(T obj) => + JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); internal static JsonElement SerializeToElement(T obj) => JsonSerializer.SerializeToElement(obj, JsonOptions.JsonSerializerOptions); @@ -90,8 +105,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"') + }; } internal static T Deserialize(string json) => diff --git a/generators/csharp/codegen/src/context/AbstractCsharpGeneratorContext.ts b/generators/csharp/codegen/src/context/AbstractCsharpGeneratorContext.ts index bd0e65d7cc6..671e6329517 100644 --- a/generators/csharp/codegen/src/context/AbstractCsharpGeneratorContext.ts +++ b/generators/csharp/codegen/src/context/AbstractCsharpGeneratorContext.ts @@ -151,6 +151,27 @@ export abstract class AbstractCsharpGeneratorContext< ); } + public createAdditionalPropertiesField(): csharp.Field { + return csharp.field({ + name: "AdditionalProperties", + type: this.getAdditionalPropertiesType(), + access: csharp.Access.Public, + summary: "Additional properties received from the response, if any.", + set: csharp.Access.Internal, + get: csharp.Access.Public, + initializer: csharp.codeblock((writer) => + writer.writeNode( + csharp.dictionary({ + keyType: csharp.Type.string(), + valueType: csharp.Type.reference(this.getJsonElementClassReference()), + values: undefined + }) + ) + ), + annotations: [this.getJsonExtensionDataAttribute()] + }); + } + public getProtoAnyMapperClassReference(): csharp.ClassReference { return csharp.classReference({ namespace: this.getCoreNamespace(), diff --git a/generators/csharp/model/src/generateFields.ts b/generators/csharp/model/src/generateFields.ts index 28f27fcabb1..03911afe0a6 100644 --- a/generators/csharp/model/src/generateFields.ts +++ b/generators/csharp/model/src/generateFields.ts @@ -9,32 +9,42 @@ export function generateFields({ className, context }: { - properties: FernIr.ObjectProperty[]; + properties: (FernIr.ObjectProperty | FernIr.InlinedRequestBodyProperty)[]; className: string; context: ModelGeneratorContext; }): csharp.Field[] { - return properties.map((property) => { - const fieldType = context.csharpTypeMapper.convert({ reference: property.valueType }); - const maybeLiteralInitializer = context.getLiteralInitializerFromTypeReference({ - typeReference: property.valueType - }); - const fieldAttributes = []; - if (property.propertyAccess) { - fieldAttributes.push(context.createJsonAccessAttribute(property.propertyAccess)); - } + return properties.map((property) => generateField({ property, className, context })); +} + +export function generateField({ + property, + className, + context +}: { + property: FernIr.ObjectProperty | FernIr.InlinedRequestBodyProperty; + className: string; + context: ModelGeneratorContext; +}): csharp.Field { + const fieldType = context.csharpTypeMapper.convert({ reference: property.valueType }); + const maybeLiteralInitializer = context.getLiteralInitializerFromTypeReference({ + typeReference: property.valueType + }); + const fieldAttributes = []; + if ("propertyAccess" in property && property.propertyAccess) { + fieldAttributes.push(context.createJsonAccessAttribute(property.propertyAccess)); + } - return csharp.field({ - name: getPropertyName({ className, objectProperty: property.name, context }), - type: fieldType, - access: csharp.Access.Public, - get: true, - set: true, - summary: property.docs, - jsonPropertyName: property.name.wireValue, - useRequired: true, - initializer: maybeLiteralInitializer, - annotations: fieldAttributes - }); + return csharp.field({ + name: getPropertyName({ className, objectProperty: property.name, context }), + type: fieldType, + access: csharp.Access.Public, + get: true, + set: true, + summary: property.docs, + jsonPropertyName: property.name.wireValue, + useRequired: true, + initializer: maybeLiteralInitializer, + annotations: fieldAttributes }); } diff --git a/generators/csharp/model/src/index.ts b/generators/csharp/model/src/index.ts index 187ffe46e5c..b216d4b92d7 100644 --- a/generators/csharp/model/src/index.ts +++ b/generators/csharp/model/src/index.ts @@ -1,4 +1,5 @@ export { generateModels } from "./generateModels"; +export { generateFields, generateField } from "./generateFields"; export { generateModelTests as generateTests } from "./generateTests"; export { generateWellKnownProtobufFiles } from "./generateWellKnownProtobufFiles"; export { generateVersion } from "./generateVersion"; diff --git a/generators/csharp/model/src/object/ObjectGenerator.ts b/generators/csharp/model/src/object/ObjectGenerator.ts index 9d25da58e02..1b4b52cfaec 100644 --- a/generators/csharp/model/src/object/ObjectGenerator.ts +++ b/generators/csharp/model/src/object/ObjectGenerator.ts @@ -39,26 +39,7 @@ export class ObjectGenerator extends FileGenerator - writer.writeNode( - csharp.dictionary({ - keyType: csharp.Type.string(), - valueType: csharp.Type.reference(this.context.getJsonElementClassReference()), - values: undefined - }) - ) - ), - annotations: [this.context.getJsonExtensionDataAttribute()] - }) - ); + class_.addField(this.context.createAdditionalPropertiesField()); class_.addMethod(this.context.getToStringMethod()); diff --git a/generators/csharp/sdk/src/endpoint/request/WrappedEndpointRequest.ts b/generators/csharp/sdk/src/endpoint/request/WrappedEndpointRequest.ts index cb66ce363c8..423242849cd 100644 --- a/generators/csharp/sdk/src/endpoint/request/WrappedEndpointRequest.ts +++ b/generators/csharp/sdk/src/endpoint/request/WrappedEndpointRequest.ts @@ -242,35 +242,9 @@ export class WrappedEndpointRequest extends EndpointRequest { requestBodyReference: `${this.getParameterName()}.${this.wrapper.bodyKey.pascalCase.safeName}` }; }, - inlinedRequestBody: (inlinedRequestBody) => { - if (this.endpoint.queryParameters.length === 0 && this.endpoint.headers.length === 0) { - return { - requestBodyReference: `${this.getParameterName()}` - }; - } - const allProperties = [ - ...inlinedRequestBody.properties, - ...(inlinedRequestBody.extendedProperties ?? []) - ]; - const requestBody = csharp.dictionary({ - keyType: csharp.Type.string(), - valueType: csharp.Type.object(), - values: { - type: "entries", - entries: allProperties.map((property) => ({ - key: csharp.codeblock(`"${property.name.wireValue}"`), - value: csharp.codeblock( - `${this.getParameterName()}.${property.name.name.pascalCase.safeName}` - ) - })) - } - }); + inlinedRequestBody: () => { return { - requestBodyReference: this.getRequestBodyVariableName(), - code: csharp.codeblock((writer) => { - writer.write(`var ${this.getRequestBodyVariableName()} = `); - writer.writeNodeStatement(requestBody); - }) + requestBodyReference: this.getParameterName() }; }, fileUpload: () => undefined, diff --git a/generators/csharp/sdk/src/wrapped-request/WrappedRequestGenerator.ts b/generators/csharp/sdk/src/wrapped-request/WrappedRequestGenerator.ts index 5d8df04cc99..3bd704a7bc1 100644 --- a/generators/csharp/sdk/src/wrapped-request/WrappedRequestGenerator.ts +++ b/generators/csharp/sdk/src/wrapped-request/WrappedRequestGenerator.ts @@ -1,5 +1,5 @@ import { CSharpFile, FileGenerator, csharp } from "@fern-api/csharp-codegen"; -import { ExampleGenerator } from "@fern-api/fern-csharp-model"; +import { ExampleGenerator, generateField } from "@fern-api/fern-csharp-model"; import { RelativeFilePath, join } from "@fern-api/fs-utils"; import { @@ -121,45 +121,35 @@ export class WrappedRequestGenerator extends FileGenerator { + const type = this.context.csharpTypeMapper.convert({ reference: reference.requestBodyType }); + const useRequired = !type.isOptional(); class_.addField( csharp.field({ name: this.wrapper.bodyKey.pascalCase.safeName, - type: this.context.csharpTypeMapper.convert({ reference: reference.requestBodyType }), + type, access: csharp.Access.Public, get: true, set: true, summary: reference.docs, - useRequired: true + useRequired, + annotations: [this.context.getJsonIgnoreAnnotation()] }) ); }, inlinedRequestBody: (request) => { for (const property of [...request.properties, ...(request.extendedProperties ?? [])]) { - const propertyName = property.name.name.pascalCase.safeName; - const maybeLiteralInitializer = this.context.getLiteralInitializerFromTypeReference({ - typeReference: property.valueType + const field = generateField({ + property, + className: this.classReference.name, + context: this.context }); - class_.addField( - csharp.field({ - name: propertyName, - type: this.context.csharpTypeMapper.convert({ reference: property.valueType }), - access: csharp.Access.Public, - get: true, - set: true, - summary: property.docs, - jsonPropertyName: addJsonAnnotations ? property.name.wireValue : undefined, - useRequired: true, - initializer: maybeLiteralInitializer - }) - ); + class_.addField(field); if (isProtoRequest) { protobufProperties.push({ - propertyName, + propertyName: field.name, typeReference: property.valueType }); } diff --git a/generators/csharp/sdk/versions.yml b/generators/csharp/sdk/versions.yml index 0fbbdf78e38..1ed4858b29b 100644 --- a/generators/csharp/sdk/versions.yml +++ b/generators/csharp/sdk/versions.yml @@ -6,6 +6,19 @@ # The C# SDK now uses forward-compatible enums which are not compatible with the previously generated enums. # Set `enable-forward-compatible-enums` to `false` in the configuration to generate the old enums. # irVersion: 53 +- version: 1.12.0-rc18 + createdAt: "2025-03-10" + irVersion: 57 + changelogEntry: + - type: fix + summary: | + Make the behavior between a wrapped request with body properties and normal body request consistent. + Previously, a wrapped request with body properties would not omit `null` values even if the JSON configuration is configured to omit `null` values. + - type: fix + summary: | + Fix a bug where required properties that were `[JsonIgnore]` threw an error during serialization. + - type: feat + summary: Improve performance of query string value to string conversion by relying less on `JsonSerializer` and more on `ToString()`. - version: 1.12.0-rc17 createdAt: "2025-03-09" diff --git a/seed/csharp-model/accept-header/src/SeedAccept/Core/JsonConfiguration.cs b/seed/csharp-model/accept-header/src/SeedAccept/Core/JsonConfiguration.cs index eb998122ac5..23a05927e1f 100644 --- a/seed/csharp-model/accept-header/src/SeedAccept/Core/JsonConfiguration.cs +++ b/seed/csharp-model/accept-header/src/SeedAccept/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedAccept.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/alias-extends/src/SeedAliasExtends/Core/JsonConfiguration.cs b/seed/csharp-model/alias-extends/src/SeedAliasExtends/Core/JsonConfiguration.cs index fb3e0a683d6..f95b7caf653 100644 --- a/seed/csharp-model/alias-extends/src/SeedAliasExtends/Core/JsonConfiguration.cs +++ b/seed/csharp-model/alias-extends/src/SeedAliasExtends/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedAliasExtends.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/alias/src/SeedAlias/Core/JsonConfiguration.cs b/seed/csharp-model/alias/src/SeedAlias/Core/JsonConfiguration.cs index 71029f87b11..29b8191f0cb 100644 --- a/seed/csharp-model/alias/src/SeedAlias/Core/JsonConfiguration.cs +++ b/seed/csharp-model/alias/src/SeedAlias/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedAlias.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/any-auth/src/SeedAnyAuth/Core/JsonConfiguration.cs b/seed/csharp-model/any-auth/src/SeedAnyAuth/Core/JsonConfiguration.cs index 41e9867c878..1dbe93967ca 100644 --- a/seed/csharp-model/any-auth/src/SeedAnyAuth/Core/JsonConfiguration.cs +++ b/seed/csharp-model/any-auth/src/SeedAnyAuth/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedAnyAuth.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/api-wide-base-path/src/SeedApiWideBasePath/Core/JsonConfiguration.cs b/seed/csharp-model/api-wide-base-path/src/SeedApiWideBasePath/Core/JsonConfiguration.cs index e17f2b4adad..a90211caf04 100644 --- a/seed/csharp-model/api-wide-base-path/src/SeedApiWideBasePath/Core/JsonConfiguration.cs +++ b/seed/csharp-model/api-wide-base-path/src/SeedApiWideBasePath/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApiWideBasePath.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/audiences/src/SeedAudiences/Core/JsonConfiguration.cs b/seed/csharp-model/audiences/src/SeedAudiences/Core/JsonConfiguration.cs index 5fa8f62ead6..87397771a6c 100644 --- a/seed/csharp-model/audiences/src/SeedAudiences/Core/JsonConfiguration.cs +++ b/seed/csharp-model/audiences/src/SeedAudiences/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedAudiences.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/auth-environment-variables/src/SeedAuthEnvironmentVariables/Core/JsonConfiguration.cs b/seed/csharp-model/auth-environment-variables/src/SeedAuthEnvironmentVariables/Core/JsonConfiguration.cs index cb8e36fa9a2..34c16547b8d 100644 --- a/seed/csharp-model/auth-environment-variables/src/SeedAuthEnvironmentVariables/Core/JsonConfiguration.cs +++ b/seed/csharp-model/auth-environment-variables/src/SeedAuthEnvironmentVariables/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedAuthEnvironmentVariables.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/basic-auth-environment-variables/src/SeedBasicAuthEnvironmentVariables/Core/JsonConfiguration.cs b/seed/csharp-model/basic-auth-environment-variables/src/SeedBasicAuthEnvironmentVariables/Core/JsonConfiguration.cs index 09716940cc8..5b08428deb7 100644 --- a/seed/csharp-model/basic-auth-environment-variables/src/SeedBasicAuthEnvironmentVariables/Core/JsonConfiguration.cs +++ b/seed/csharp-model/basic-auth-environment-variables/src/SeedBasicAuthEnvironmentVariables/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedBasicAuthEnvironmentVariables.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/basic-auth/src/SeedBasicAuth/Core/JsonConfiguration.cs b/seed/csharp-model/basic-auth/src/SeedBasicAuth/Core/JsonConfiguration.cs index 38eee6c852b..b67eb513c8a 100644 --- a/seed/csharp-model/basic-auth/src/SeedBasicAuth/Core/JsonConfiguration.cs +++ b/seed/csharp-model/basic-auth/src/SeedBasicAuth/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedBasicAuth.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/bearer-token-environment-variable/src/SeedBearerTokenEnvironmentVariable/Core/JsonConfiguration.cs b/seed/csharp-model/bearer-token-environment-variable/src/SeedBearerTokenEnvironmentVariable/Core/JsonConfiguration.cs index 7a90ac6aaad..d0441f52c87 100644 --- a/seed/csharp-model/bearer-token-environment-variable/src/SeedBearerTokenEnvironmentVariable/Core/JsonConfiguration.cs +++ b/seed/csharp-model/bearer-token-environment-variable/src/SeedBearerTokenEnvironmentVariable/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedBearerTokenEnvironmentVariable.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/bytes/src/SeedBytes/Core/JsonConfiguration.cs b/seed/csharp-model/bytes/src/SeedBytes/Core/JsonConfiguration.cs index cb372a82d67..4a2576e7d49 100644 --- a/seed/csharp-model/bytes/src/SeedBytes/Core/JsonConfiguration.cs +++ b/seed/csharp-model/bytes/src/SeedBytes/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedBytes.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/circular-references-advanced/src/SeedApi/Core/JsonConfiguration.cs b/seed/csharp-model/circular-references-advanced/src/SeedApi/Core/JsonConfiguration.cs index 09d8d6b9199..6d7fc87692a 100644 --- a/seed/csharp-model/circular-references-advanced/src/SeedApi/Core/JsonConfiguration.cs +++ b/seed/csharp-model/circular-references-advanced/src/SeedApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/circular-references/src/SeedApi/Core/JsonConfiguration.cs b/seed/csharp-model/circular-references/src/SeedApi/Core/JsonConfiguration.cs index 09d8d6b9199..6d7fc87692a 100644 --- a/seed/csharp-model/circular-references/src/SeedApi/Core/JsonConfiguration.cs +++ b/seed/csharp-model/circular-references/src/SeedApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/cross-package-type-names/src/SeedCrossPackageTypeNames/Core/JsonConfiguration.cs b/seed/csharp-model/cross-package-type-names/src/SeedCrossPackageTypeNames/Core/JsonConfiguration.cs index 13149a22d26..b782651762c 100644 --- a/seed/csharp-model/cross-package-type-names/src/SeedCrossPackageTypeNames/Core/JsonConfiguration.cs +++ b/seed/csharp-model/cross-package-type-names/src/SeedCrossPackageTypeNames/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedCrossPackageTypeNames.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/csharp-grpc-proto-exhaustive/src/SeedApi/Core/JsonConfiguration.cs b/seed/csharp-model/csharp-grpc-proto-exhaustive/src/SeedApi/Core/JsonConfiguration.cs index 09d8d6b9199..6d7fc87692a 100644 --- a/seed/csharp-model/csharp-grpc-proto-exhaustive/src/SeedApi/Core/JsonConfiguration.cs +++ b/seed/csharp-model/csharp-grpc-proto-exhaustive/src/SeedApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/csharp-grpc-proto/src/SeedApi/Core/JsonConfiguration.cs b/seed/csharp-model/csharp-grpc-proto/src/SeedApi/Core/JsonConfiguration.cs index 09d8d6b9199..6d7fc87692a 100644 --- a/seed/csharp-model/csharp-grpc-proto/src/SeedApi/Core/JsonConfiguration.cs +++ b/seed/csharp-model/csharp-grpc-proto/src/SeedApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/csharp-namespace-conflict/src/SeedCsharpNamespaceConflict/Core/JsonConfiguration.cs b/seed/csharp-model/csharp-namespace-conflict/src/SeedCsharpNamespaceConflict/Core/JsonConfiguration.cs index 46aac871239..6f1fe658108 100644 --- a/seed/csharp-model/csharp-namespace-conflict/src/SeedCsharpNamespaceConflict/Core/JsonConfiguration.cs +++ b/seed/csharp-model/csharp-namespace-conflict/src/SeedCsharpNamespaceConflict/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedCsharpNamespaceConflict.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/csharp-property-access/src/SeedCsharpAccess/Core/JsonConfiguration.cs b/seed/csharp-model/csharp-property-access/src/SeedCsharpAccess/Core/JsonConfiguration.cs index 5b1866b0a51..bdcd4c6490c 100644 --- a/seed/csharp-model/csharp-property-access/src/SeedCsharpAccess/Core/JsonConfiguration.cs +++ b/seed/csharp-model/csharp-property-access/src/SeedCsharpAccess/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedCsharpAccess.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/custom-auth/src/SeedCustomAuth/Core/JsonConfiguration.cs b/seed/csharp-model/custom-auth/src/SeedCustomAuth/Core/JsonConfiguration.cs index fedcdd63cb6..97ffcb62f6c 100644 --- a/seed/csharp-model/custom-auth/src/SeedCustomAuth/Core/JsonConfiguration.cs +++ b/seed/csharp-model/custom-auth/src/SeedCustomAuth/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedCustomAuth.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/enum/forward-compatible-enums/src/SeedEnum/Core/JsonConfiguration.cs b/seed/csharp-model/enum/forward-compatible-enums/src/SeedEnum/Core/JsonConfiguration.cs index 059d36239f4..33d37c30d58 100644 --- a/seed/csharp-model/enum/forward-compatible-enums/src/SeedEnum/Core/JsonConfiguration.cs +++ b/seed/csharp-model/enum/forward-compatible-enums/src/SeedEnum/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedEnum.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/enum/plain-enums/src/SeedEnum/Core/JsonConfiguration.cs b/seed/csharp-model/enum/plain-enums/src/SeedEnum/Core/JsonConfiguration.cs index 059d36239f4..33d37c30d58 100644 --- a/seed/csharp-model/enum/plain-enums/src/SeedEnum/Core/JsonConfiguration.cs +++ b/seed/csharp-model/enum/plain-enums/src/SeedEnum/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedEnum.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/error-property/src/SeedErrorProperty/Core/JsonConfiguration.cs b/seed/csharp-model/error-property/src/SeedErrorProperty/Core/JsonConfiguration.cs index 7cf3a4e9477..58fca61d7b2 100644 --- a/seed/csharp-model/error-property/src/SeedErrorProperty/Core/JsonConfiguration.cs +++ b/seed/csharp-model/error-property/src/SeedErrorProperty/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedErrorProperty.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/examples/src/SeedExamples/Core/JsonConfiguration.cs b/seed/csharp-model/examples/src/SeedExamples/Core/JsonConfiguration.cs index 75ecf455dbd..774cc603032 100644 --- a/seed/csharp-model/examples/src/SeedExamples/Core/JsonConfiguration.cs +++ b/seed/csharp-model/examples/src/SeedExamples/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedExamples.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/exhaustive/src/SeedExhaustive/Core/JsonConfiguration.cs b/seed/csharp-model/exhaustive/src/SeedExhaustive/Core/JsonConfiguration.cs index a216585ff8a..1ecde7ba6c2 100644 --- a/seed/csharp-model/exhaustive/src/SeedExhaustive/Core/JsonConfiguration.cs +++ b/seed/csharp-model/exhaustive/src/SeedExhaustive/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedExhaustive.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/extends/src/SeedExtends/Core/JsonConfiguration.cs b/seed/csharp-model/extends/src/SeedExtends/Core/JsonConfiguration.cs index 900c15dee3f..77060b65974 100644 --- a/seed/csharp-model/extends/src/SeedExtends/Core/JsonConfiguration.cs +++ b/seed/csharp-model/extends/src/SeedExtends/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedExtends.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/extra-properties/src/SeedExtraProperties/Core/JsonConfiguration.cs b/seed/csharp-model/extra-properties/src/SeedExtraProperties/Core/JsonConfiguration.cs index 739dce701fb..2c209269957 100644 --- a/seed/csharp-model/extra-properties/src/SeedExtraProperties/Core/JsonConfiguration.cs +++ b/seed/csharp-model/extra-properties/src/SeedExtraProperties/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedExtraProperties.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/file-download/src/SeedFileDownload/Core/JsonConfiguration.cs b/seed/csharp-model/file-download/src/SeedFileDownload/Core/JsonConfiguration.cs index 6bf53e2cd1b..85c3d836a41 100644 --- a/seed/csharp-model/file-download/src/SeedFileDownload/Core/JsonConfiguration.cs +++ b/seed/csharp-model/file-download/src/SeedFileDownload/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedFileDownload.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/file-upload/src/SeedFileUpload/Core/JsonConfiguration.cs b/seed/csharp-model/file-upload/src/SeedFileUpload/Core/JsonConfiguration.cs index 88dad68556f..5fad20718ab 100644 --- a/seed/csharp-model/file-upload/src/SeedFileUpload/Core/JsonConfiguration.cs +++ b/seed/csharp-model/file-upload/src/SeedFileUpload/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedFileUpload.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/folders/src/SeedApi/Core/JsonConfiguration.cs b/seed/csharp-model/folders/src/SeedApi/Core/JsonConfiguration.cs index 09d8d6b9199..6d7fc87692a 100644 --- a/seed/csharp-model/folders/src/SeedApi/Core/JsonConfiguration.cs +++ b/seed/csharp-model/folders/src/SeedApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/idempotency-headers/src/SeedIdempotencyHeaders/Core/JsonConfiguration.cs b/seed/csharp-model/idempotency-headers/src/SeedIdempotencyHeaders/Core/JsonConfiguration.cs index 4aa069360cd..3bbb266ea8a 100644 --- a/seed/csharp-model/idempotency-headers/src/SeedIdempotencyHeaders/Core/JsonConfiguration.cs +++ b/seed/csharp-model/idempotency-headers/src/SeedIdempotencyHeaders/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedIdempotencyHeaders.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/imdb/src/SeedApi/Core/JsonConfiguration.cs b/seed/csharp-model/imdb/src/SeedApi/Core/JsonConfiguration.cs index 09d8d6b9199..6d7fc87692a 100644 --- a/seed/csharp-model/imdb/src/SeedApi/Core/JsonConfiguration.cs +++ b/seed/csharp-model/imdb/src/SeedApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/license/src/SeedLicense/Core/JsonConfiguration.cs b/seed/csharp-model/license/src/SeedLicense/Core/JsonConfiguration.cs index 9f7c5d4444f..1453ff06c37 100644 --- a/seed/csharp-model/license/src/SeedLicense/Core/JsonConfiguration.cs +++ b/seed/csharp-model/license/src/SeedLicense/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedLicense.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/literal/src/SeedLiteral/Core/JsonConfiguration.cs b/seed/csharp-model/literal/src/SeedLiteral/Core/JsonConfiguration.cs index 6861c0d301f..b482d742a3c 100644 --- a/seed/csharp-model/literal/src/SeedLiteral/Core/JsonConfiguration.cs +++ b/seed/csharp-model/literal/src/SeedLiteral/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedLiteral.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/mixed-case/src/SeedMixedCase/Core/JsonConfiguration.cs b/seed/csharp-model/mixed-case/src/SeedMixedCase/Core/JsonConfiguration.cs index 219c4fe33a1..b2f9e31d76d 100644 --- a/seed/csharp-model/mixed-case/src/SeedMixedCase/Core/JsonConfiguration.cs +++ b/seed/csharp-model/mixed-case/src/SeedMixedCase/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedMixedCase.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/mixed-file-directory/src/SeedMixedFileDirectory/Core/JsonConfiguration.cs b/seed/csharp-model/mixed-file-directory/src/SeedMixedFileDirectory/Core/JsonConfiguration.cs index a935ca2af2a..8ee28483424 100644 --- a/seed/csharp-model/mixed-file-directory/src/SeedMixedFileDirectory/Core/JsonConfiguration.cs +++ b/seed/csharp-model/mixed-file-directory/src/SeedMixedFileDirectory/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedMixedFileDirectory.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/multi-line-docs/src/SeedMultiLineDocs/Core/JsonConfiguration.cs b/seed/csharp-model/multi-line-docs/src/SeedMultiLineDocs/Core/JsonConfiguration.cs index 13ba0103a82..dc1ae2fd606 100644 --- a/seed/csharp-model/multi-line-docs/src/SeedMultiLineDocs/Core/JsonConfiguration.cs +++ b/seed/csharp-model/multi-line-docs/src/SeedMultiLineDocs/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedMultiLineDocs.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/multi-url-environment-no-default/src/SeedMultiUrlEnvironmentNoDefault/Core/JsonConfiguration.cs b/seed/csharp-model/multi-url-environment-no-default/src/SeedMultiUrlEnvironmentNoDefault/Core/JsonConfiguration.cs index d2d464a3b07..908bb808116 100644 --- a/seed/csharp-model/multi-url-environment-no-default/src/SeedMultiUrlEnvironmentNoDefault/Core/JsonConfiguration.cs +++ b/seed/csharp-model/multi-url-environment-no-default/src/SeedMultiUrlEnvironmentNoDefault/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedMultiUrlEnvironmentNoDefault.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/multi-url-environment/src/SeedMultiUrlEnvironment/Core/JsonConfiguration.cs b/seed/csharp-model/multi-url-environment/src/SeedMultiUrlEnvironment/Core/JsonConfiguration.cs index 5ec1eba4441..0a151b8485b 100644 --- a/seed/csharp-model/multi-url-environment/src/SeedMultiUrlEnvironment/Core/JsonConfiguration.cs +++ b/seed/csharp-model/multi-url-environment/src/SeedMultiUrlEnvironment/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedMultiUrlEnvironment.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/no-environment/src/SeedNoEnvironment/Core/JsonConfiguration.cs b/seed/csharp-model/no-environment/src/SeedNoEnvironment/Core/JsonConfiguration.cs index 3638e913bd3..c5007dc396b 100644 --- a/seed/csharp-model/no-environment/src/SeedNoEnvironment/Core/JsonConfiguration.cs +++ b/seed/csharp-model/no-environment/src/SeedNoEnvironment/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedNoEnvironment.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/nullable/src/SeedNullable/Core/JsonConfiguration.cs b/seed/csharp-model/nullable/src/SeedNullable/Core/JsonConfiguration.cs index 509021b9d78..52271f35c8b 100644 --- a/seed/csharp-model/nullable/src/SeedNullable/Core/JsonConfiguration.cs +++ b/seed/csharp-model/nullable/src/SeedNullable/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedNullable.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/oauth-client-credentials-custom/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs b/seed/csharp-model/oauth-client-credentials-custom/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs index f8c49524922..64e8c38e923 100644 --- a/seed/csharp-model/oauth-client-credentials-custom/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs +++ b/seed/csharp-model/oauth-client-credentials-custom/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedOauthClientCredentials.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/oauth-client-credentials-default/src/SeedOauthClientCredentialsDefault/Core/JsonConfiguration.cs b/seed/csharp-model/oauth-client-credentials-default/src/SeedOauthClientCredentialsDefault/Core/JsonConfiguration.cs index 240d5a1ca35..da9dc607973 100644 --- a/seed/csharp-model/oauth-client-credentials-default/src/SeedOauthClientCredentialsDefault/Core/JsonConfiguration.cs +++ b/seed/csharp-model/oauth-client-credentials-default/src/SeedOauthClientCredentialsDefault/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedOauthClientCredentialsDefault.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/oauth-client-credentials-environment-variables/src/SeedOauthClientCredentialsEnvironmentVariables/Core/JsonConfiguration.cs b/seed/csharp-model/oauth-client-credentials-environment-variables/src/SeedOauthClientCredentialsEnvironmentVariables/Core/JsonConfiguration.cs index e42d14cb47d..748c2406443 100644 --- a/seed/csharp-model/oauth-client-credentials-environment-variables/src/SeedOauthClientCredentialsEnvironmentVariables/Core/JsonConfiguration.cs +++ b/seed/csharp-model/oauth-client-credentials-environment-variables/src/SeedOauthClientCredentialsEnvironmentVariables/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedOauthClientCredentialsEnvironmentVariables.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/oauth-client-credentials-nested-root/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs b/seed/csharp-model/oauth-client-credentials-nested-root/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs index f8c49524922..64e8c38e923 100644 --- a/seed/csharp-model/oauth-client-credentials-nested-root/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs +++ b/seed/csharp-model/oauth-client-credentials-nested-root/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedOauthClientCredentials.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/oauth-client-credentials/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs b/seed/csharp-model/oauth-client-credentials/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs index f8c49524922..64e8c38e923 100644 --- a/seed/csharp-model/oauth-client-credentials/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs +++ b/seed/csharp-model/oauth-client-credentials/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedOauthClientCredentials.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/object/src/SeedObject/Core/JsonConfiguration.cs b/seed/csharp-model/object/src/SeedObject/Core/JsonConfiguration.cs index 62bd22a9770..e95a7d8d66d 100644 --- a/seed/csharp-model/object/src/SeedObject/Core/JsonConfiguration.cs +++ b/seed/csharp-model/object/src/SeedObject/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedObject.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/objects-with-imports/src/SeedObjectsWithImports/Core/JsonConfiguration.cs b/seed/csharp-model/objects-with-imports/src/SeedObjectsWithImports/Core/JsonConfiguration.cs index a679a499f1e..5385070a4ab 100644 --- a/seed/csharp-model/objects-with-imports/src/SeedObjectsWithImports/Core/JsonConfiguration.cs +++ b/seed/csharp-model/objects-with-imports/src/SeedObjectsWithImports/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedObjectsWithImports.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/optional/src/SeedObjectsWithImports/Core/JsonConfiguration.cs b/seed/csharp-model/optional/src/SeedObjectsWithImports/Core/JsonConfiguration.cs index a679a499f1e..5385070a4ab 100644 --- a/seed/csharp-model/optional/src/SeedObjectsWithImports/Core/JsonConfiguration.cs +++ b/seed/csharp-model/optional/src/SeedObjectsWithImports/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedObjectsWithImports.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/package-yml/src/SeedPackageYml/Core/JsonConfiguration.cs b/seed/csharp-model/package-yml/src/SeedPackageYml/Core/JsonConfiguration.cs index d6bb04fd6a1..8ab1aba9595 100644 --- a/seed/csharp-model/package-yml/src/SeedPackageYml/Core/JsonConfiguration.cs +++ b/seed/csharp-model/package-yml/src/SeedPackageYml/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedPackageYml.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/pagination/src/SeedPagination/Core/JsonConfiguration.cs b/seed/csharp-model/pagination/src/SeedPagination/Core/JsonConfiguration.cs index eb7cb4c7df4..2be7a5424fb 100644 --- a/seed/csharp-model/pagination/src/SeedPagination/Core/JsonConfiguration.cs +++ b/seed/csharp-model/pagination/src/SeedPagination/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedPagination.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/path-parameters/src/SeedPathParameters/Core/JsonConfiguration.cs b/seed/csharp-model/path-parameters/src/SeedPathParameters/Core/JsonConfiguration.cs index 4a098a4fbf6..0693615ccdb 100644 --- a/seed/csharp-model/path-parameters/src/SeedPathParameters/Core/JsonConfiguration.cs +++ b/seed/csharp-model/path-parameters/src/SeedPathParameters/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedPathParameters.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/plain-text/src/SeedPlainText/Core/JsonConfiguration.cs b/seed/csharp-model/plain-text/src/SeedPlainText/Core/JsonConfiguration.cs index c3421fc38a4..0cf449ae031 100644 --- a/seed/csharp-model/plain-text/src/SeedPlainText/Core/JsonConfiguration.cs +++ b/seed/csharp-model/plain-text/src/SeedPlainText/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedPlainText.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/query-parameters/src/SeedQueryParameters/Core/JsonConfiguration.cs b/seed/csharp-model/query-parameters/src/SeedQueryParameters/Core/JsonConfiguration.cs index a27bc70db36..ccd5841d325 100644 --- a/seed/csharp-model/query-parameters/src/SeedQueryParameters/Core/JsonConfiguration.cs +++ b/seed/csharp-model/query-parameters/src/SeedQueryParameters/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedQueryParameters.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/reserved-keywords/src/SeedNurseryApi/Core/JsonConfiguration.cs b/seed/csharp-model/reserved-keywords/src/SeedNurseryApi/Core/JsonConfiguration.cs index 268e33fc253..eeaf89d1597 100644 --- a/seed/csharp-model/reserved-keywords/src/SeedNurseryApi/Core/JsonConfiguration.cs +++ b/seed/csharp-model/reserved-keywords/src/SeedNurseryApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedNurseryApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/response-property/src/SeedResponseProperty/Core/JsonConfiguration.cs b/seed/csharp-model/response-property/src/SeedResponseProperty/Core/JsonConfiguration.cs index 59c50cad00f..1b01679b00b 100644 --- a/seed/csharp-model/response-property/src/SeedResponseProperty/Core/JsonConfiguration.cs +++ b/seed/csharp-model/response-property/src/SeedResponseProperty/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedResponseProperty.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/server-sent-event-examples/src/SeedServerSentEvents/Core/JsonConfiguration.cs b/seed/csharp-model/server-sent-event-examples/src/SeedServerSentEvents/Core/JsonConfiguration.cs index 77b53e65e0a..b9a07df7283 100644 --- a/seed/csharp-model/server-sent-event-examples/src/SeedServerSentEvents/Core/JsonConfiguration.cs +++ b/seed/csharp-model/server-sent-event-examples/src/SeedServerSentEvents/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedServerSentEvents.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/server-sent-events/src/SeedServerSentEvents/Core/JsonConfiguration.cs b/seed/csharp-model/server-sent-events/src/SeedServerSentEvents/Core/JsonConfiguration.cs index 77b53e65e0a..b9a07df7283 100644 --- a/seed/csharp-model/server-sent-events/src/SeedServerSentEvents/Core/JsonConfiguration.cs +++ b/seed/csharp-model/server-sent-events/src/SeedServerSentEvents/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedServerSentEvents.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/simple-fhir/src/SeedApi/Core/JsonConfiguration.cs b/seed/csharp-model/simple-fhir/src/SeedApi/Core/JsonConfiguration.cs index 09d8d6b9199..6d7fc87692a 100644 --- a/seed/csharp-model/simple-fhir/src/SeedApi/Core/JsonConfiguration.cs +++ b/seed/csharp-model/simple-fhir/src/SeedApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/single-url-environment-default/src/SeedSingleUrlEnvironmentDefault/Core/JsonConfiguration.cs b/seed/csharp-model/single-url-environment-default/src/SeedSingleUrlEnvironmentDefault/Core/JsonConfiguration.cs index bb1828f0094..75fd9a9879c 100644 --- a/seed/csharp-model/single-url-environment-default/src/SeedSingleUrlEnvironmentDefault/Core/JsonConfiguration.cs +++ b/seed/csharp-model/single-url-environment-default/src/SeedSingleUrlEnvironmentDefault/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedSingleUrlEnvironmentDefault.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/single-url-environment-no-default/src/SeedSingleUrlEnvironmentNoDefault/Core/JsonConfiguration.cs b/seed/csharp-model/single-url-environment-no-default/src/SeedSingleUrlEnvironmentNoDefault/Core/JsonConfiguration.cs index 444a49ec51e..10ec4fe65cb 100644 --- a/seed/csharp-model/single-url-environment-no-default/src/SeedSingleUrlEnvironmentNoDefault/Core/JsonConfiguration.cs +++ b/seed/csharp-model/single-url-environment-no-default/src/SeedSingleUrlEnvironmentNoDefault/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedSingleUrlEnvironmentNoDefault.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/streaming-parameter/src/SeedStreaming/Core/JsonConfiguration.cs b/seed/csharp-model/streaming-parameter/src/SeedStreaming/Core/JsonConfiguration.cs index d10578fbded..c191d8473ac 100644 --- a/seed/csharp-model/streaming-parameter/src/SeedStreaming/Core/JsonConfiguration.cs +++ b/seed/csharp-model/streaming-parameter/src/SeedStreaming/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedStreaming.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/streaming/src/SeedStreaming/Core/JsonConfiguration.cs b/seed/csharp-model/streaming/src/SeedStreaming/Core/JsonConfiguration.cs index d10578fbded..c191d8473ac 100644 --- a/seed/csharp-model/streaming/src/SeedStreaming/Core/JsonConfiguration.cs +++ b/seed/csharp-model/streaming/src/SeedStreaming/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedStreaming.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/trace/src/SeedTrace/Core/JsonConfiguration.cs b/seed/csharp-model/trace/src/SeedTrace/Core/JsonConfiguration.cs index aef0117781d..79788c39454 100644 --- a/seed/csharp-model/trace/src/SeedTrace/Core/JsonConfiguration.cs +++ b/seed/csharp-model/trace/src/SeedTrace/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedTrace.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/undiscriminated-unions/src/SeedUndiscriminatedUnions/Core/JsonConfiguration.cs b/seed/csharp-model/undiscriminated-unions/src/SeedUndiscriminatedUnions/Core/JsonConfiguration.cs index 488f87aa4ee..275e2f9026c 100644 --- a/seed/csharp-model/undiscriminated-unions/src/SeedUndiscriminatedUnions/Core/JsonConfiguration.cs +++ b/seed/csharp-model/undiscriminated-unions/src/SeedUndiscriminatedUnions/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedUndiscriminatedUnions.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/unions/src/SeedUnions/Core/JsonConfiguration.cs b/seed/csharp-model/unions/src/SeedUnions/Core/JsonConfiguration.cs index 602eaea1754..a0b8f69790a 100644 --- a/seed/csharp-model/unions/src/SeedUnions/Core/JsonConfiguration.cs +++ b/seed/csharp-model/unions/src/SeedUnions/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedUnions.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/unknown/src/SeedUnknownAsAny/Core/JsonConfiguration.cs b/seed/csharp-model/unknown/src/SeedUnknownAsAny/Core/JsonConfiguration.cs index 538042a7234..090943589b6 100644 --- a/seed/csharp-model/unknown/src/SeedUnknownAsAny/Core/JsonConfiguration.cs +++ b/seed/csharp-model/unknown/src/SeedUnknownAsAny/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedUnknownAsAny.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/validation/src/SeedValidation/Core/JsonConfiguration.cs b/seed/csharp-model/validation/src/SeedValidation/Core/JsonConfiguration.cs index 1bcc8faa815..fba7ed7970a 100644 --- a/seed/csharp-model/validation/src/SeedValidation/Core/JsonConfiguration.cs +++ b/seed/csharp-model/validation/src/SeedValidation/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedValidation.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/variables/src/SeedVariables/Core/JsonConfiguration.cs b/seed/csharp-model/variables/src/SeedVariables/Core/JsonConfiguration.cs index 9374ebd2ce3..6aeb9c8563a 100644 --- a/seed/csharp-model/variables/src/SeedVariables/Core/JsonConfiguration.cs +++ b/seed/csharp-model/variables/src/SeedVariables/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedVariables.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/version-no-default/src/SeedVersion/Core/JsonConfiguration.cs b/seed/csharp-model/version-no-default/src/SeedVersion/Core/JsonConfiguration.cs index d1e2d54afe5..26ef5efa5af 100644 --- a/seed/csharp-model/version-no-default/src/SeedVersion/Core/JsonConfiguration.cs +++ b/seed/csharp-model/version-no-default/src/SeedVersion/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedVersion.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/version/src/SeedVersion/Core/JsonConfiguration.cs b/seed/csharp-model/version/src/SeedVersion/Core/JsonConfiguration.cs index d1e2d54afe5..26ef5efa5af 100644 --- a/seed/csharp-model/version/src/SeedVersion/Core/JsonConfiguration.cs +++ b/seed/csharp-model/version/src/SeedVersion/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedVersion.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-model/websocket/src/SeedWebsocket/Core/JsonConfiguration.cs b/seed/csharp-model/websocket/src/SeedWebsocket/Core/JsonConfiguration.cs index 9588ea58f98..13c2d08ff52 100644 --- a/seed/csharp-model/websocket/src/SeedWebsocket/Core/JsonConfiguration.cs +++ b/seed/csharp-model/websocket/src/SeedWebsocket/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedWebsocket.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/accept-header/src/SeedAccept/Core/JsonConfiguration.cs b/seed/csharp-sdk/accept-header/src/SeedAccept/Core/JsonConfiguration.cs index eb998122ac5..23a05927e1f 100644 --- a/seed/csharp-sdk/accept-header/src/SeedAccept/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/accept-header/src/SeedAccept/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedAccept.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/alias-extends/src/SeedAliasExtends/Core/JsonConfiguration.cs b/seed/csharp-sdk/alias-extends/src/SeedAliasExtends/Core/JsonConfiguration.cs index fb3e0a683d6..f95b7caf653 100644 --- a/seed/csharp-sdk/alias-extends/src/SeedAliasExtends/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/alias-extends/src/SeedAliasExtends/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedAliasExtends.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/alias/src/SeedAlias/Core/JsonConfiguration.cs b/seed/csharp-sdk/alias/src/SeedAlias/Core/JsonConfiguration.cs index 71029f87b11..29b8191f0cb 100644 --- a/seed/csharp-sdk/alias/src/SeedAlias/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/alias/src/SeedAlias/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedAlias.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/any-auth/src/SeedAnyAuth/Core/JsonConfiguration.cs b/seed/csharp-sdk/any-auth/src/SeedAnyAuth/Core/JsonConfiguration.cs index 41e9867c878..1dbe93967ca 100644 --- a/seed/csharp-sdk/any-auth/src/SeedAnyAuth/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/any-auth/src/SeedAnyAuth/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedAnyAuth.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/api-wide-base-path/src/SeedApiWideBasePath/Core/JsonConfiguration.cs b/seed/csharp-sdk/api-wide-base-path/src/SeedApiWideBasePath/Core/JsonConfiguration.cs index e17f2b4adad..a90211caf04 100644 --- a/seed/csharp-sdk/api-wide-base-path/src/SeedApiWideBasePath/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/api-wide-base-path/src/SeedApiWideBasePath/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApiWideBasePath.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/audiences/src/SeedAudiences/Core/JsonConfiguration.cs b/seed/csharp-sdk/audiences/src/SeedAudiences/Core/JsonConfiguration.cs index 5fa8f62ead6..87397771a6c 100644 --- a/seed/csharp-sdk/audiences/src/SeedAudiences/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/audiences/src/SeedAudiences/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedAudiences.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/audiences/src/SeedAudiences/Foo/FooClient.cs b/seed/csharp-sdk/audiences/src/SeedAudiences/Foo/FooClient.cs index 5c4b33a0254..79bfa171ccd 100644 --- a/seed/csharp-sdk/audiences/src/SeedAudiences/Foo/FooClient.cs +++ b/seed/csharp-sdk/audiences/src/SeedAudiences/Foo/FooClient.cs @@ -35,11 +35,6 @@ public async Task FindAsync( { _query["optionalString"] = request.OptionalString; } - var requestBody = new Dictionary() - { - { "publicProperty", request.PublicProperty }, - { "privateProperty", request.PrivateProperty }, - }; var response = await _client .SendRequestAsync( new RawClient.JsonApiRequest @@ -47,7 +42,7 @@ public async Task FindAsync( BaseUrl = _client.Options.BaseUrl, Method = HttpMethod.Post, Path = "", - Body = requestBody, + Body = request, Query = _query, Options = options, }, diff --git a/seed/csharp-sdk/audiences/src/SeedAudiences/Foo/Requests/FindRequest.cs b/seed/csharp-sdk/audiences/src/SeedAudiences/Foo/Requests/FindRequest.cs index f55a2e81469..910b9bbd556 100644 --- a/seed/csharp-sdk/audiences/src/SeedAudiences/Foo/Requests/FindRequest.cs +++ b/seed/csharp-sdk/audiences/src/SeedAudiences/Foo/Requests/FindRequest.cs @@ -8,8 +8,10 @@ public record FindRequest [JsonIgnore] public string? OptionalString { get; set; } + [JsonPropertyName("publicProperty")] public string? PublicProperty { get; set; } + [JsonPropertyName("privateProperty")] public int? PrivateProperty { get; set; } public override string ToString() diff --git a/seed/csharp-sdk/auth-environment-variables/src/SeedAuthEnvironmentVariables/Core/JsonConfiguration.cs b/seed/csharp-sdk/auth-environment-variables/src/SeedAuthEnvironmentVariables/Core/JsonConfiguration.cs index cb8e36fa9a2..34c16547b8d 100644 --- a/seed/csharp-sdk/auth-environment-variables/src/SeedAuthEnvironmentVariables/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/auth-environment-variables/src/SeedAuthEnvironmentVariables/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedAuthEnvironmentVariables.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/basic-auth-environment-variables/src/SeedBasicAuthEnvironmentVariables/Core/JsonConfiguration.cs b/seed/csharp-sdk/basic-auth-environment-variables/src/SeedBasicAuthEnvironmentVariables/Core/JsonConfiguration.cs index 09716940cc8..5b08428deb7 100644 --- a/seed/csharp-sdk/basic-auth-environment-variables/src/SeedBasicAuthEnvironmentVariables/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/basic-auth-environment-variables/src/SeedBasicAuthEnvironmentVariables/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedBasicAuthEnvironmentVariables.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/basic-auth/src/SeedBasicAuth/Core/JsonConfiguration.cs b/seed/csharp-sdk/basic-auth/src/SeedBasicAuth/Core/JsonConfiguration.cs index 38eee6c852b..b67eb513c8a 100644 --- a/seed/csharp-sdk/basic-auth/src/SeedBasicAuth/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/basic-auth/src/SeedBasicAuth/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedBasicAuth.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/bearer-token-environment-variable/src/SeedBearerTokenEnvironmentVariable/Core/JsonConfiguration.cs b/seed/csharp-sdk/bearer-token-environment-variable/src/SeedBearerTokenEnvironmentVariable/Core/JsonConfiguration.cs index 7a90ac6aaad..d0441f52c87 100644 --- a/seed/csharp-sdk/bearer-token-environment-variable/src/SeedBearerTokenEnvironmentVariable/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/bearer-token-environment-variable/src/SeedBearerTokenEnvironmentVariable/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedBearerTokenEnvironmentVariable.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/bytes/src/SeedBytes/Core/JsonConfiguration.cs b/seed/csharp-sdk/bytes/src/SeedBytes/Core/JsonConfiguration.cs index cb372a82d67..4a2576e7d49 100644 --- a/seed/csharp-sdk/bytes/src/SeedBytes/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/bytes/src/SeedBytes/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedBytes.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/circular-references-advanced/src/SeedApi/Core/JsonConfiguration.cs b/seed/csharp-sdk/circular-references-advanced/src/SeedApi/Core/JsonConfiguration.cs index 09d8d6b9199..6d7fc87692a 100644 --- a/seed/csharp-sdk/circular-references-advanced/src/SeedApi/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/circular-references-advanced/src/SeedApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/circular-references/src/SeedApi/Core/JsonConfiguration.cs b/seed/csharp-sdk/circular-references/src/SeedApi/Core/JsonConfiguration.cs index 09d8d6b9199..6d7fc87692a 100644 --- a/seed/csharp-sdk/circular-references/src/SeedApi/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/circular-references/src/SeedApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/cross-package-type-names/src/SeedCrossPackageTypeNames/Core/JsonConfiguration.cs b/seed/csharp-sdk/cross-package-type-names/src/SeedCrossPackageTypeNames/Core/JsonConfiguration.cs index 13149a22d26..b782651762c 100644 --- a/seed/csharp-sdk/cross-package-type-names/src/SeedCrossPackageTypeNames/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/cross-package-type-names/src/SeedCrossPackageTypeNames/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedCrossPackageTypeNames.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/cross-package-type-names/src/SeedCrossPackageTypeNames/Foo/FooClient.cs b/seed/csharp-sdk/cross-package-type-names/src/SeedCrossPackageTypeNames/Foo/FooClient.cs index c6921dd3171..849996f3b63 100644 --- a/seed/csharp-sdk/cross-package-type-names/src/SeedCrossPackageTypeNames/Foo/FooClient.cs +++ b/seed/csharp-sdk/cross-package-type-names/src/SeedCrossPackageTypeNames/Foo/FooClient.cs @@ -35,11 +35,6 @@ public async Task FindAsync( { _query["optionalString"] = request.OptionalString; } - var requestBody = new Dictionary() - { - { "publicProperty", request.PublicProperty }, - { "privateProperty", request.PrivateProperty }, - }; var response = await _client .SendRequestAsync( new RawClient.JsonApiRequest @@ -47,7 +42,7 @@ public async Task FindAsync( BaseUrl = _client.Options.BaseUrl, Method = HttpMethod.Post, Path = "", - Body = requestBody, + Body = request, Query = _query, Options = options, }, diff --git a/seed/csharp-sdk/cross-package-type-names/src/SeedCrossPackageTypeNames/Foo/Requests/FindRequest.cs b/seed/csharp-sdk/cross-package-type-names/src/SeedCrossPackageTypeNames/Foo/Requests/FindRequest.cs index ec07907382d..10d0a9d55bc 100644 --- a/seed/csharp-sdk/cross-package-type-names/src/SeedCrossPackageTypeNames/Foo/Requests/FindRequest.cs +++ b/seed/csharp-sdk/cross-package-type-names/src/SeedCrossPackageTypeNames/Foo/Requests/FindRequest.cs @@ -8,8 +8,10 @@ public record FindRequest [JsonIgnore] public string? OptionalString { get; set; } + [JsonPropertyName("publicProperty")] public string? PublicProperty { get; set; } + [JsonPropertyName("privateProperty")] public int? PrivateProperty { get; set; } public override string ToString() diff --git a/seed/csharp-sdk/csharp-grpc-proto-exhaustive/include-exception-handler/src/SeedApi/Core/JsonConfiguration.cs b/seed/csharp-sdk/csharp-grpc-proto-exhaustive/include-exception-handler/src/SeedApi/Core/JsonConfiguration.cs index 09d8d6b9199..6d7fc87692a 100644 --- a/seed/csharp-sdk/csharp-grpc-proto-exhaustive/include-exception-handler/src/SeedApi/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/csharp-grpc-proto-exhaustive/include-exception-handler/src/SeedApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/csharp-grpc-proto-exhaustive/no-custom-config/src/SeedApi/Core/JsonConfiguration.cs b/seed/csharp-sdk/csharp-grpc-proto-exhaustive/no-custom-config/src/SeedApi/Core/JsonConfiguration.cs index 09d8d6b9199..6d7fc87692a 100644 --- a/seed/csharp-sdk/csharp-grpc-proto-exhaustive/no-custom-config/src/SeedApi/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/csharp-grpc-proto-exhaustive/no-custom-config/src/SeedApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/csharp-grpc-proto-exhaustive/package-id/src/SeedApi/Core/JsonConfiguration.cs b/seed/csharp-sdk/csharp-grpc-proto-exhaustive/package-id/src/SeedApi/Core/JsonConfiguration.cs index 09d8d6b9199..6d7fc87692a 100644 --- a/seed/csharp-sdk/csharp-grpc-proto-exhaustive/package-id/src/SeedApi/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/csharp-grpc-proto-exhaustive/package-id/src/SeedApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/csharp-grpc-proto-exhaustive/read-only-memory/src/SeedApi/Core/JsonConfiguration.cs b/seed/csharp-sdk/csharp-grpc-proto-exhaustive/read-only-memory/src/SeedApi/Core/JsonConfiguration.cs index 09d8d6b9199..6d7fc87692a 100644 --- a/seed/csharp-sdk/csharp-grpc-proto-exhaustive/read-only-memory/src/SeedApi/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/csharp-grpc-proto-exhaustive/read-only-memory/src/SeedApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/csharp-grpc-proto/src/SeedApi/Core/JsonConfiguration.cs b/seed/csharp-sdk/csharp-grpc-proto/src/SeedApi/Core/JsonConfiguration.cs index 09d8d6b9199..6d7fc87692a 100644 --- a/seed/csharp-sdk/csharp-grpc-proto/src/SeedApi/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/csharp-grpc-proto/src/SeedApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/csharp-namespace-conflict/src/SeedCsharpNamespaceConflict/Core/JsonConfiguration.cs b/seed/csharp-sdk/csharp-namespace-conflict/src/SeedCsharpNamespaceConflict/Core/JsonConfiguration.cs index 46aac871239..6f1fe658108 100644 --- a/seed/csharp-sdk/csharp-namespace-conflict/src/SeedCsharpNamespaceConflict/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/csharp-namespace-conflict/src/SeedCsharpNamespaceConflict/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedCsharpNamespaceConflict.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/csharp-property-access/src/SeedCsharpAccess/Core/JsonConfiguration.cs b/seed/csharp-sdk/csharp-property-access/src/SeedCsharpAccess/Core/JsonConfiguration.cs index 5b1866b0a51..bdcd4c6490c 100644 --- a/seed/csharp-sdk/csharp-property-access/src/SeedCsharpAccess/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/csharp-property-access/src/SeedCsharpAccess/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedCsharpAccess.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/custom-auth/src/SeedCustomAuth/Core/JsonConfiguration.cs b/seed/csharp-sdk/custom-auth/src/SeedCustomAuth/Core/JsonConfiguration.cs index fedcdd63cb6..97ffcb62f6c 100644 --- a/seed/csharp-sdk/custom-auth/src/SeedCustomAuth/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/custom-auth/src/SeedCustomAuth/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedCustomAuth.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/enum/forward-compatible-enums/src/SeedEnum/Core/JsonConfiguration.cs b/seed/csharp-sdk/enum/forward-compatible-enums/src/SeedEnum/Core/JsonConfiguration.cs index 059d36239f4..33d37c30d58 100644 --- a/seed/csharp-sdk/enum/forward-compatible-enums/src/SeedEnum/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/enum/forward-compatible-enums/src/SeedEnum/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedEnum.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/enum/plain-enums/src/SeedEnum/Core/JsonConfiguration.cs b/seed/csharp-sdk/enum/plain-enums/src/SeedEnum/Core/JsonConfiguration.cs index 059d36239f4..33d37c30d58 100644 --- a/seed/csharp-sdk/enum/plain-enums/src/SeedEnum/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/enum/plain-enums/src/SeedEnum/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedEnum.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/error-property/src/SeedErrorProperty/Core/JsonConfiguration.cs b/seed/csharp-sdk/error-property/src/SeedErrorProperty/Core/JsonConfiguration.cs index 7cf3a4e9477..58fca61d7b2 100644 --- a/seed/csharp-sdk/error-property/src/SeedErrorProperty/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/error-property/src/SeedErrorProperty/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedErrorProperty.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/examples/no-custom-config/src/SeedExamples/Core/JsonConfiguration.cs b/seed/csharp-sdk/examples/no-custom-config/src/SeedExamples/Core/JsonConfiguration.cs index 75ecf455dbd..774cc603032 100644 --- a/seed/csharp-sdk/examples/no-custom-config/src/SeedExamples/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/examples/no-custom-config/src/SeedExamples/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedExamples.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/examples/readme-config/src/SeedExamples/Core/JsonConfiguration.cs b/seed/csharp-sdk/examples/readme-config/src/SeedExamples/Core/JsonConfiguration.cs index 75ecf455dbd..774cc603032 100644 --- a/seed/csharp-sdk/examples/readme-config/src/SeedExamples/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/examples/readme-config/src/SeedExamples/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedExamples.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/exhaustive/explicit-namespaces/src/SeedExhaustive/Core/JsonConfiguration.cs b/seed/csharp-sdk/exhaustive/explicit-namespaces/src/SeedExhaustive/Core/JsonConfiguration.cs index a216585ff8a..1ecde7ba6c2 100644 --- a/seed/csharp-sdk/exhaustive/explicit-namespaces/src/SeedExhaustive/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/exhaustive/explicit-namespaces/src/SeedExhaustive/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedExhaustive.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/exhaustive/explicit-namespaces/src/SeedExhaustive/Endpoints/Params/Requests/ModifyResourceAtInlinedPath.cs b/seed/csharp-sdk/exhaustive/explicit-namespaces/src/SeedExhaustive/Endpoints/Params/Requests/ModifyResourceAtInlinedPath.cs index bca255e01ae..226ea339764 100644 --- a/seed/csharp-sdk/exhaustive/explicit-namespaces/src/SeedExhaustive/Endpoints/Params/Requests/ModifyResourceAtInlinedPath.cs +++ b/seed/csharp-sdk/exhaustive/explicit-namespaces/src/SeedExhaustive/Endpoints/Params/Requests/ModifyResourceAtInlinedPath.cs @@ -1,9 +1,11 @@ +using System.Text.Json.Serialization; using SeedExhaustive.Core; namespace SeedExhaustive.Endpoints.Params; public record ModifyResourceAtInlinedPath { + [JsonIgnore] public required string Body { get; set; } public override string ToString() diff --git a/seed/csharp-sdk/exhaustive/explicit-namespaces/src/SeedExhaustive/ReqWithHeaders/Requests/ReqWithHeaders.cs b/seed/csharp-sdk/exhaustive/explicit-namespaces/src/SeedExhaustive/ReqWithHeaders/Requests/ReqWithHeaders.cs index 924d60ec13a..144dc88ffca 100644 --- a/seed/csharp-sdk/exhaustive/explicit-namespaces/src/SeedExhaustive/ReqWithHeaders/Requests/ReqWithHeaders.cs +++ b/seed/csharp-sdk/exhaustive/explicit-namespaces/src/SeedExhaustive/ReqWithHeaders/Requests/ReqWithHeaders.cs @@ -11,6 +11,7 @@ public record ReqWithHeaders [JsonIgnore] public required string XTestEndpointHeader { get; set; } + [JsonIgnore] public required string Body { get; set; } public override string ToString() diff --git a/seed/csharp-sdk/exhaustive/include-exception-handler/src/SeedExhaustive/Core/JsonConfiguration.cs b/seed/csharp-sdk/exhaustive/include-exception-handler/src/SeedExhaustive/Core/JsonConfiguration.cs index a216585ff8a..1ecde7ba6c2 100644 --- a/seed/csharp-sdk/exhaustive/include-exception-handler/src/SeedExhaustive/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/exhaustive/include-exception-handler/src/SeedExhaustive/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedExhaustive.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/exhaustive/include-exception-handler/src/SeedExhaustive/Endpoints/Params/Requests/ModifyResourceAtInlinedPath.cs b/seed/csharp-sdk/exhaustive/include-exception-handler/src/SeedExhaustive/Endpoints/Params/Requests/ModifyResourceAtInlinedPath.cs index ef96e9cab04..685fcc255ad 100644 --- a/seed/csharp-sdk/exhaustive/include-exception-handler/src/SeedExhaustive/Endpoints/Params/Requests/ModifyResourceAtInlinedPath.cs +++ b/seed/csharp-sdk/exhaustive/include-exception-handler/src/SeedExhaustive/Endpoints/Params/Requests/ModifyResourceAtInlinedPath.cs @@ -1,9 +1,11 @@ +using System.Text.Json.Serialization; using SeedExhaustive.Core; namespace SeedExhaustive.Endpoints; public record ModifyResourceAtInlinedPath { + [JsonIgnore] public required string Body { get; set; } public override string ToString() diff --git a/seed/csharp-sdk/exhaustive/include-exception-handler/src/SeedExhaustive/ReqWithHeaders/Requests/ReqWithHeaders.cs b/seed/csharp-sdk/exhaustive/include-exception-handler/src/SeedExhaustive/ReqWithHeaders/Requests/ReqWithHeaders.cs index 764e4c3732d..69d5eec332b 100644 --- a/seed/csharp-sdk/exhaustive/include-exception-handler/src/SeedExhaustive/ReqWithHeaders/Requests/ReqWithHeaders.cs +++ b/seed/csharp-sdk/exhaustive/include-exception-handler/src/SeedExhaustive/ReqWithHeaders/Requests/ReqWithHeaders.cs @@ -11,6 +11,7 @@ public record ReqWithHeaders [JsonIgnore] public required string XTestEndpointHeader { get; set; } + [JsonIgnore] public required string Body { get; set; } public override string ToString() diff --git a/seed/csharp-sdk/exhaustive/no-generate-error-types/src/SeedExhaustive/Core/JsonConfiguration.cs b/seed/csharp-sdk/exhaustive/no-generate-error-types/src/SeedExhaustive/Core/JsonConfiguration.cs index a216585ff8a..1ecde7ba6c2 100644 --- a/seed/csharp-sdk/exhaustive/no-generate-error-types/src/SeedExhaustive/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/exhaustive/no-generate-error-types/src/SeedExhaustive/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedExhaustive.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/exhaustive/no-generate-error-types/src/SeedExhaustive/Endpoints/Params/Requests/ModifyResourceAtInlinedPath.cs b/seed/csharp-sdk/exhaustive/no-generate-error-types/src/SeedExhaustive/Endpoints/Params/Requests/ModifyResourceAtInlinedPath.cs index ef96e9cab04..685fcc255ad 100644 --- a/seed/csharp-sdk/exhaustive/no-generate-error-types/src/SeedExhaustive/Endpoints/Params/Requests/ModifyResourceAtInlinedPath.cs +++ b/seed/csharp-sdk/exhaustive/no-generate-error-types/src/SeedExhaustive/Endpoints/Params/Requests/ModifyResourceAtInlinedPath.cs @@ -1,9 +1,11 @@ +using System.Text.Json.Serialization; using SeedExhaustive.Core; namespace SeedExhaustive.Endpoints; public record ModifyResourceAtInlinedPath { + [JsonIgnore] public required string Body { get; set; } public override string ToString() diff --git a/seed/csharp-sdk/exhaustive/no-generate-error-types/src/SeedExhaustive/ReqWithHeaders/Requests/ReqWithHeaders.cs b/seed/csharp-sdk/exhaustive/no-generate-error-types/src/SeedExhaustive/ReqWithHeaders/Requests/ReqWithHeaders.cs index 764e4c3732d..69d5eec332b 100644 --- a/seed/csharp-sdk/exhaustive/no-generate-error-types/src/SeedExhaustive/ReqWithHeaders/Requests/ReqWithHeaders.cs +++ b/seed/csharp-sdk/exhaustive/no-generate-error-types/src/SeedExhaustive/ReqWithHeaders/Requests/ReqWithHeaders.cs @@ -11,6 +11,7 @@ public record ReqWithHeaders [JsonIgnore] public required string XTestEndpointHeader { get; set; } + [JsonIgnore] public required string Body { get; set; } public override string ToString() diff --git a/seed/csharp-sdk/exhaustive/no-root-namespace-for-core-classes/src/SeedExhaustive/Core/JsonConfiguration.cs b/seed/csharp-sdk/exhaustive/no-root-namespace-for-core-classes/src/SeedExhaustive/Core/JsonConfiguration.cs index a216585ff8a..1ecde7ba6c2 100644 --- a/seed/csharp-sdk/exhaustive/no-root-namespace-for-core-classes/src/SeedExhaustive/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/exhaustive/no-root-namespace-for-core-classes/src/SeedExhaustive/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedExhaustive.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/exhaustive/no-root-namespace-for-core-classes/src/SeedExhaustive/Endpoints/Params/Requests/ModifyResourceAtInlinedPath.cs b/seed/csharp-sdk/exhaustive/no-root-namespace-for-core-classes/src/SeedExhaustive/Endpoints/Params/Requests/ModifyResourceAtInlinedPath.cs index ef96e9cab04..685fcc255ad 100644 --- a/seed/csharp-sdk/exhaustive/no-root-namespace-for-core-classes/src/SeedExhaustive/Endpoints/Params/Requests/ModifyResourceAtInlinedPath.cs +++ b/seed/csharp-sdk/exhaustive/no-root-namespace-for-core-classes/src/SeedExhaustive/Endpoints/Params/Requests/ModifyResourceAtInlinedPath.cs @@ -1,9 +1,11 @@ +using System.Text.Json.Serialization; using SeedExhaustive.Core; namespace SeedExhaustive.Endpoints; public record ModifyResourceAtInlinedPath { + [JsonIgnore] public required string Body { get; set; } public override string ToString() diff --git a/seed/csharp-sdk/exhaustive/no-root-namespace-for-core-classes/src/SeedExhaustive/ReqWithHeaders/Requests/ReqWithHeaders.cs b/seed/csharp-sdk/exhaustive/no-root-namespace-for-core-classes/src/SeedExhaustive/ReqWithHeaders/Requests/ReqWithHeaders.cs index 764e4c3732d..69d5eec332b 100644 --- a/seed/csharp-sdk/exhaustive/no-root-namespace-for-core-classes/src/SeedExhaustive/ReqWithHeaders/Requests/ReqWithHeaders.cs +++ b/seed/csharp-sdk/exhaustive/no-root-namespace-for-core-classes/src/SeedExhaustive/ReqWithHeaders/Requests/ReqWithHeaders.cs @@ -11,6 +11,7 @@ public record ReqWithHeaders [JsonIgnore] public required string XTestEndpointHeader { get; set; } + [JsonIgnore] public required string Body { get; set; } public override string ToString() diff --git a/seed/csharp-sdk/extends/src/SeedExtends/Core/JsonConfiguration.cs b/seed/csharp-sdk/extends/src/SeedExtends/Core/JsonConfiguration.cs index 900c15dee3f..77060b65974 100644 --- a/seed/csharp-sdk/extends/src/SeedExtends/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/extends/src/SeedExtends/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedExtends.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/extra-properties/src/SeedExtraProperties/Core/JsonConfiguration.cs b/seed/csharp-sdk/extra-properties/src/SeedExtraProperties/Core/JsonConfiguration.cs index 739dce701fb..2c209269957 100644 --- a/seed/csharp-sdk/extra-properties/src/SeedExtraProperties/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/extra-properties/src/SeedExtraProperties/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedExtraProperties.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/file-download/src/SeedFileDownload/Core/JsonConfiguration.cs b/seed/csharp-sdk/file-download/src/SeedFileDownload/Core/JsonConfiguration.cs index 6bf53e2cd1b..85c3d836a41 100644 --- a/seed/csharp-sdk/file-download/src/SeedFileDownload/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/file-download/src/SeedFileDownload/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedFileDownload.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/file-upload/src/SeedFileUpload/Core/JsonConfiguration.cs b/seed/csharp-sdk/file-upload/src/SeedFileUpload/Core/JsonConfiguration.cs index 88dad68556f..5fad20718ab 100644 --- a/seed/csharp-sdk/file-upload/src/SeedFileUpload/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/file-upload/src/SeedFileUpload/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedFileUpload.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/folders/src/SeedApi/Core/JsonConfiguration.cs b/seed/csharp-sdk/folders/src/SeedApi/Core/JsonConfiguration.cs index 09d8d6b9199..6d7fc87692a 100644 --- a/seed/csharp-sdk/folders/src/SeedApi/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/folders/src/SeedApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/idempotency-headers/src/SeedIdempotencyHeaders/Core/JsonConfiguration.cs b/seed/csharp-sdk/idempotency-headers/src/SeedIdempotencyHeaders/Core/JsonConfiguration.cs index 4aa069360cd..3bbb266ea8a 100644 --- a/seed/csharp-sdk/idempotency-headers/src/SeedIdempotencyHeaders/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/idempotency-headers/src/SeedIdempotencyHeaders/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedIdempotencyHeaders.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/imdb/exception-class-names/src/SeedApi/Core/JsonConfiguration.cs b/seed/csharp-sdk/imdb/exception-class-names/src/SeedApi/Core/JsonConfiguration.cs index 09d8d6b9199..6d7fc87692a 100644 --- a/seed/csharp-sdk/imdb/exception-class-names/src/SeedApi/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/imdb/exception-class-names/src/SeedApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/imdb/exported-client-class-name/src/SeedApi/Core/JsonConfiguration.cs b/seed/csharp-sdk/imdb/exported-client-class-name/src/SeedApi/Core/JsonConfiguration.cs index 09d8d6b9199..6d7fc87692a 100644 --- a/seed/csharp-sdk/imdb/exported-client-class-name/src/SeedApi/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/imdb/exported-client-class-name/src/SeedApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/imdb/extra-dependencies/src/SeedApi/Core/JsonConfiguration.cs b/seed/csharp-sdk/imdb/extra-dependencies/src/SeedApi/Core/JsonConfiguration.cs index 09d8d6b9199..6d7fc87692a 100644 --- a/seed/csharp-sdk/imdb/extra-dependencies/src/SeedApi/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/imdb/extra-dependencies/src/SeedApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/imdb/include-exception-handler/src/SeedApi/Core/JsonConfiguration.cs b/seed/csharp-sdk/imdb/include-exception-handler/src/SeedApi/Core/JsonConfiguration.cs index 09d8d6b9199..6d7fc87692a 100644 --- a/seed/csharp-sdk/imdb/include-exception-handler/src/SeedApi/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/imdb/include-exception-handler/src/SeedApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/imdb/no-custom-config/src/SeedApi/Core/JsonConfiguration.cs b/seed/csharp-sdk/imdb/no-custom-config/src/SeedApi/Core/JsonConfiguration.cs index 09d8d6b9199..6d7fc87692a 100644 --- a/seed/csharp-sdk/imdb/no-custom-config/src/SeedApi/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/imdb/no-custom-config/src/SeedApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/license/custom-license/src/SeedLicense/Core/JsonConfiguration.cs b/seed/csharp-sdk/license/custom-license/src/SeedLicense/Core/JsonConfiguration.cs index 9f7c5d4444f..1453ff06c37 100644 --- a/seed/csharp-sdk/license/custom-license/src/SeedLicense/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/license/custom-license/src/SeedLicense/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedLicense.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/license/mit-license/src/SeedLicense/Core/JsonConfiguration.cs b/seed/csharp-sdk/license/mit-license/src/SeedLicense/Core/JsonConfiguration.cs index 9f7c5d4444f..1453ff06c37 100644 --- a/seed/csharp-sdk/license/mit-license/src/SeedLicense/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/license/mit-license/src/SeedLicense/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedLicense.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/literal/src/SeedLiteral/Core/JsonConfiguration.cs b/seed/csharp-sdk/literal/src/SeedLiteral/Core/JsonConfiguration.cs index 6861c0d301f..b482d742a3c 100644 --- a/seed/csharp-sdk/literal/src/SeedLiteral/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/literal/src/SeedLiteral/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedLiteral.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/literal/src/SeedLiteral/Headers/HeadersClient.cs b/seed/csharp-sdk/literal/src/SeedLiteral/Headers/HeadersClient.cs index e4db3085c18..ac309f13b0a 100644 --- a/seed/csharp-sdk/literal/src/SeedLiteral/Headers/HeadersClient.cs +++ b/seed/csharp-sdk/literal/src/SeedLiteral/Headers/HeadersClient.cs @@ -37,7 +37,6 @@ public async Task SendAsync( { "X-Async", JsonUtils.Serialize(request.Async) }, } ); - var requestBody = new Dictionary() { { "query", request.Query } }; var response = await _client .SendRequestAsync( new RawClient.JsonApiRequest @@ -45,7 +44,7 @@ public async Task SendAsync( BaseUrl = _client.Options.BaseUrl, Method = HttpMethod.Post, Path = "headers", - Body = requestBody, + Body = request, Headers = _headers, Options = options, }, diff --git a/seed/csharp-sdk/literal/src/SeedLiteral/Headers/Requests/SendLiteralsInHeadersRequest.cs b/seed/csharp-sdk/literal/src/SeedLiteral/Headers/Requests/SendLiteralsInHeadersRequest.cs index 99e11145260..dbedae3ab9b 100644 --- a/seed/csharp-sdk/literal/src/SeedLiteral/Headers/Requests/SendLiteralsInHeadersRequest.cs +++ b/seed/csharp-sdk/literal/src/SeedLiteral/Headers/Requests/SendLiteralsInHeadersRequest.cs @@ -11,6 +11,7 @@ public record SendLiteralsInHeadersRequest [JsonIgnore] public bool Async { get; set; } = true; + [JsonPropertyName("query")] public required string Query { get; set; } public override string ToString() diff --git a/seed/csharp-sdk/mixed-case/src/SeedMixedCase/Core/JsonConfiguration.cs b/seed/csharp-sdk/mixed-case/src/SeedMixedCase/Core/JsonConfiguration.cs index 219c4fe33a1..b2f9e31d76d 100644 --- a/seed/csharp-sdk/mixed-case/src/SeedMixedCase/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/mixed-case/src/SeedMixedCase/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedMixedCase.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/mixed-file-directory/src/SeedMixedFileDirectory/Core/JsonConfiguration.cs b/seed/csharp-sdk/mixed-file-directory/src/SeedMixedFileDirectory/Core/JsonConfiguration.cs index a935ca2af2a..8ee28483424 100644 --- a/seed/csharp-sdk/mixed-file-directory/src/SeedMixedFileDirectory/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/mixed-file-directory/src/SeedMixedFileDirectory/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedMixedFileDirectory.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/multi-line-docs/src/SeedMultiLineDocs/Core/JsonConfiguration.cs b/seed/csharp-sdk/multi-line-docs/src/SeedMultiLineDocs/Core/JsonConfiguration.cs index 13ba0103a82..dc1ae2fd606 100644 --- a/seed/csharp-sdk/multi-line-docs/src/SeedMultiLineDocs/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/multi-line-docs/src/SeedMultiLineDocs/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedMultiLineDocs.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/multi-url-environment-no-default/src/SeedMultiUrlEnvironmentNoDefault/Core/JsonConfiguration.cs b/seed/csharp-sdk/multi-url-environment-no-default/src/SeedMultiUrlEnvironmentNoDefault/Core/JsonConfiguration.cs index d2d464a3b07..908bb808116 100644 --- a/seed/csharp-sdk/multi-url-environment-no-default/src/SeedMultiUrlEnvironmentNoDefault/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/multi-url-environment-no-default/src/SeedMultiUrlEnvironmentNoDefault/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedMultiUrlEnvironmentNoDefault.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/multi-url-environment/environment-class-name/src/SeedMultiUrlEnvironment/Core/JsonConfiguration.cs b/seed/csharp-sdk/multi-url-environment/environment-class-name/src/SeedMultiUrlEnvironment/Core/JsonConfiguration.cs index 5ec1eba4441..0a151b8485b 100644 --- a/seed/csharp-sdk/multi-url-environment/environment-class-name/src/SeedMultiUrlEnvironment/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/multi-url-environment/environment-class-name/src/SeedMultiUrlEnvironment/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedMultiUrlEnvironment.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/multi-url-environment/no-pascal-case-environments/src/SeedMultiUrlEnvironment/Core/JsonConfiguration.cs b/seed/csharp-sdk/multi-url-environment/no-pascal-case-environments/src/SeedMultiUrlEnvironment/Core/JsonConfiguration.cs index 5ec1eba4441..0a151b8485b 100644 --- a/seed/csharp-sdk/multi-url-environment/no-pascal-case-environments/src/SeedMultiUrlEnvironment/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/multi-url-environment/no-pascal-case-environments/src/SeedMultiUrlEnvironment/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedMultiUrlEnvironment.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/no-environment/src/SeedNoEnvironment/Core/JsonConfiguration.cs b/seed/csharp-sdk/no-environment/src/SeedNoEnvironment/Core/JsonConfiguration.cs index 3638e913bd3..c5007dc396b 100644 --- a/seed/csharp-sdk/no-environment/src/SeedNoEnvironment/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/no-environment/src/SeedNoEnvironment/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedNoEnvironment.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/nullable/src/SeedNullable/Core/JsonConfiguration.cs b/seed/csharp-sdk/nullable/src/SeedNullable/Core/JsonConfiguration.cs index 509021b9d78..52271f35c8b 100644 --- a/seed/csharp-sdk/nullable/src/SeedNullable/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/nullable/src/SeedNullable/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedNullable.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/oauth-client-credentials-custom/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs b/seed/csharp-sdk/oauth-client-credentials-custom/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs index f8c49524922..64e8c38e923 100644 --- a/seed/csharp-sdk/oauth-client-credentials-custom/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/oauth-client-credentials-custom/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedOauthClientCredentials.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/oauth-client-credentials-default/src/SeedOauthClientCredentialsDefault/Core/JsonConfiguration.cs b/seed/csharp-sdk/oauth-client-credentials-default/src/SeedOauthClientCredentialsDefault/Core/JsonConfiguration.cs index 240d5a1ca35..da9dc607973 100644 --- a/seed/csharp-sdk/oauth-client-credentials-default/src/SeedOauthClientCredentialsDefault/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/oauth-client-credentials-default/src/SeedOauthClientCredentialsDefault/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedOauthClientCredentialsDefault.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/oauth-client-credentials-environment-variables/src/SeedOauthClientCredentialsEnvironmentVariables/Core/JsonConfiguration.cs b/seed/csharp-sdk/oauth-client-credentials-environment-variables/src/SeedOauthClientCredentialsEnvironmentVariables/Core/JsonConfiguration.cs index e42d14cb47d..748c2406443 100644 --- a/seed/csharp-sdk/oauth-client-credentials-environment-variables/src/SeedOauthClientCredentialsEnvironmentVariables/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/oauth-client-credentials-environment-variables/src/SeedOauthClientCredentialsEnvironmentVariables/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedOauthClientCredentialsEnvironmentVariables.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/oauth-client-credentials-nested-root/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs b/seed/csharp-sdk/oauth-client-credentials-nested-root/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs index f8c49524922..64e8c38e923 100644 --- a/seed/csharp-sdk/oauth-client-credentials-nested-root/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/oauth-client-credentials-nested-root/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedOauthClientCredentials.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/oauth-client-credentials/include-exception-handler/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs b/seed/csharp-sdk/oauth-client-credentials/include-exception-handler/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs index f8c49524922..64e8c38e923 100644 --- a/seed/csharp-sdk/oauth-client-credentials/include-exception-handler/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/oauth-client-credentials/include-exception-handler/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedOauthClientCredentials.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/oauth-client-credentials/no-custom-config/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs b/seed/csharp-sdk/oauth-client-credentials/no-custom-config/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs index f8c49524922..64e8c38e923 100644 --- a/seed/csharp-sdk/oauth-client-credentials/no-custom-config/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/oauth-client-credentials/no-custom-config/src/SeedOauthClientCredentials/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedOauthClientCredentials.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/object/src/SeedObject/Core/JsonConfiguration.cs b/seed/csharp-sdk/object/src/SeedObject/Core/JsonConfiguration.cs index 62bd22a9770..e95a7d8d66d 100644 --- a/seed/csharp-sdk/object/src/SeedObject/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/object/src/SeedObject/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedObject.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/objects-with-imports/src/SeedObjectsWithImports/Core/JsonConfiguration.cs b/seed/csharp-sdk/objects-with-imports/src/SeedObjectsWithImports/Core/JsonConfiguration.cs index a679a499f1e..5385070a4ab 100644 --- a/seed/csharp-sdk/objects-with-imports/src/SeedObjectsWithImports/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/objects-with-imports/src/SeedObjectsWithImports/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedObjectsWithImports.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/optional/no-simplify-object-dictionaries/src/SeedObjectsWithImports/Core/JsonConfiguration.cs b/seed/csharp-sdk/optional/no-simplify-object-dictionaries/src/SeedObjectsWithImports/Core/JsonConfiguration.cs index a679a499f1e..5385070a4ab 100644 --- a/seed/csharp-sdk/optional/no-simplify-object-dictionaries/src/SeedObjectsWithImports/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/optional/no-simplify-object-dictionaries/src/SeedObjectsWithImports/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedObjectsWithImports.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/package-yml/src/SeedPackageYml/Core/JsonConfiguration.cs b/seed/csharp-sdk/package-yml/src/SeedPackageYml/Core/JsonConfiguration.cs index d6bb04fd6a1..8ab1aba9595 100644 --- a/seed/csharp-sdk/package-yml/src/SeedPackageYml/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/package-yml/src/SeedPackageYml/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedPackageYml.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/pagination/custom-pager-with-exception-handler/src/SeedPagination/Core/JsonConfiguration.cs b/seed/csharp-sdk/pagination/custom-pager-with-exception-handler/src/SeedPagination/Core/JsonConfiguration.cs index eb7cb4c7df4..2be7a5424fb 100644 --- a/seed/csharp-sdk/pagination/custom-pager-with-exception-handler/src/SeedPagination/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/pagination/custom-pager-with-exception-handler/src/SeedPagination/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedPagination.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/pagination/custom-pager/src/SeedPagination/Core/JsonConfiguration.cs b/seed/csharp-sdk/pagination/custom-pager/src/SeedPagination/Core/JsonConfiguration.cs index eb7cb4c7df4..2be7a5424fb 100644 --- a/seed/csharp-sdk/pagination/custom-pager/src/SeedPagination/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/pagination/custom-pager/src/SeedPagination/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedPagination.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/pagination/no-custom-config/src/SeedPagination/Core/JsonConfiguration.cs b/seed/csharp-sdk/pagination/no-custom-config/src/SeedPagination/Core/JsonConfiguration.cs index eb7cb4c7df4..2be7a5424fb 100644 --- a/seed/csharp-sdk/pagination/no-custom-config/src/SeedPagination/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/pagination/no-custom-config/src/SeedPagination/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedPagination.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/path-parameters/inline-path-parameters/src/SeedPathParameters/Core/JsonConfiguration.cs b/seed/csharp-sdk/path-parameters/inline-path-parameters/src/SeedPathParameters/Core/JsonConfiguration.cs index 4a098a4fbf6..0693615ccdb 100644 --- a/seed/csharp-sdk/path-parameters/inline-path-parameters/src/SeedPathParameters/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/path-parameters/inline-path-parameters/src/SeedPathParameters/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedPathParameters.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/path-parameters/inline-path-parameters/src/SeedPathParameters/User/Requests/UpdateUserRequest.cs b/seed/csharp-sdk/path-parameters/inline-path-parameters/src/SeedPathParameters/User/Requests/UpdateUserRequest.cs index 57e4dffc1b9..8e602e4c4e6 100644 --- a/seed/csharp-sdk/path-parameters/inline-path-parameters/src/SeedPathParameters/User/Requests/UpdateUserRequest.cs +++ b/seed/csharp-sdk/path-parameters/inline-path-parameters/src/SeedPathParameters/User/Requests/UpdateUserRequest.cs @@ -11,6 +11,7 @@ public record UpdateUserRequest [JsonIgnore] public required string UserId { get; set; } + [JsonIgnore] public required User Body { get; set; } public override string ToString() diff --git a/seed/csharp-sdk/path-parameters/no-custom-config/src/SeedPathParameters/Core/JsonConfiguration.cs b/seed/csharp-sdk/path-parameters/no-custom-config/src/SeedPathParameters/Core/JsonConfiguration.cs index 4a098a4fbf6..0693615ccdb 100644 --- a/seed/csharp-sdk/path-parameters/no-custom-config/src/SeedPathParameters/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/path-parameters/no-custom-config/src/SeedPathParameters/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedPathParameters.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/path-parameters/no-custom-config/src/SeedPathParameters/User/Requests/UpdateUserRequest.cs b/seed/csharp-sdk/path-parameters/no-custom-config/src/SeedPathParameters/User/Requests/UpdateUserRequest.cs index 1518bdb45c0..923aaf7534f 100644 --- a/seed/csharp-sdk/path-parameters/no-custom-config/src/SeedPathParameters/User/Requests/UpdateUserRequest.cs +++ b/seed/csharp-sdk/path-parameters/no-custom-config/src/SeedPathParameters/User/Requests/UpdateUserRequest.cs @@ -1,9 +1,11 @@ +using System.Text.Json.Serialization; using SeedPathParameters.Core; namespace SeedPathParameters; public record UpdateUserRequest { + [JsonIgnore] public required User Body { get; set; } public override string ToString() diff --git a/seed/csharp-sdk/plain-text/src/SeedPlainText/Core/JsonConfiguration.cs b/seed/csharp-sdk/plain-text/src/SeedPlainText/Core/JsonConfiguration.cs index c3421fc38a4..0cf449ae031 100644 --- a/seed/csharp-sdk/plain-text/src/SeedPlainText/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/plain-text/src/SeedPlainText/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedPlainText.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/query-parameters/src/SeedQueryParameters/Core/JsonConfiguration.cs b/seed/csharp-sdk/query-parameters/src/SeedQueryParameters/Core/JsonConfiguration.cs index a27bc70db36..ccd5841d325 100644 --- a/seed/csharp-sdk/query-parameters/src/SeedQueryParameters/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/query-parameters/src/SeedQueryParameters/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedQueryParameters.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/reserved-keywords/src/SeedNurseryApi/Core/JsonConfiguration.cs b/seed/csharp-sdk/reserved-keywords/src/SeedNurseryApi/Core/JsonConfiguration.cs index 268e33fc253..eeaf89d1597 100644 --- a/seed/csharp-sdk/reserved-keywords/src/SeedNurseryApi/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/reserved-keywords/src/SeedNurseryApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedNurseryApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/response-property/src/SeedResponseProperty/Core/JsonConfiguration.cs b/seed/csharp-sdk/response-property/src/SeedResponseProperty/Core/JsonConfiguration.cs index 59c50cad00f..1b01679b00b 100644 --- a/seed/csharp-sdk/response-property/src/SeedResponseProperty/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/response-property/src/SeedResponseProperty/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedResponseProperty.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/server-sent-event-examples/src/SeedServerSentEvents/Core/JsonConfiguration.cs b/seed/csharp-sdk/server-sent-event-examples/src/SeedServerSentEvents/Core/JsonConfiguration.cs index 77b53e65e0a..b9a07df7283 100644 --- a/seed/csharp-sdk/server-sent-event-examples/src/SeedServerSentEvents/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/server-sent-event-examples/src/SeedServerSentEvents/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedServerSentEvents.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/server-sent-events/src/SeedServerSentEvents/Core/JsonConfiguration.cs b/seed/csharp-sdk/server-sent-events/src/SeedServerSentEvents/Core/JsonConfiguration.cs index 77b53e65e0a..b9a07df7283 100644 --- a/seed/csharp-sdk/server-sent-events/src/SeedServerSentEvents/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/server-sent-events/src/SeedServerSentEvents/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedServerSentEvents.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/simple-fhir/src/SeedApi/Core/JsonConfiguration.cs b/seed/csharp-sdk/simple-fhir/src/SeedApi/Core/JsonConfiguration.cs index 09d8d6b9199..6d7fc87692a 100644 --- a/seed/csharp-sdk/simple-fhir/src/SeedApi/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/simple-fhir/src/SeedApi/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedApi.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/single-url-environment-default/src/SeedSingleUrlEnvironmentDefault/Core/JsonConfiguration.cs b/seed/csharp-sdk/single-url-environment-default/src/SeedSingleUrlEnvironmentDefault/Core/JsonConfiguration.cs index bb1828f0094..75fd9a9879c 100644 --- a/seed/csharp-sdk/single-url-environment-default/src/SeedSingleUrlEnvironmentDefault/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/single-url-environment-default/src/SeedSingleUrlEnvironmentDefault/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedSingleUrlEnvironmentDefault.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/single-url-environment-no-default/src/SeedSingleUrlEnvironmentNoDefault/Core/JsonConfiguration.cs b/seed/csharp-sdk/single-url-environment-no-default/src/SeedSingleUrlEnvironmentNoDefault/Core/JsonConfiguration.cs index 444a49ec51e..10ec4fe65cb 100644 --- a/seed/csharp-sdk/single-url-environment-no-default/src/SeedSingleUrlEnvironmentNoDefault/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/single-url-environment-no-default/src/SeedSingleUrlEnvironmentNoDefault/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedSingleUrlEnvironmentNoDefault.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/streaming-parameter/src/SeedStreaming/Core/JsonConfiguration.cs b/seed/csharp-sdk/streaming-parameter/src/SeedStreaming/Core/JsonConfiguration.cs index d10578fbded..c191d8473ac 100644 --- a/seed/csharp-sdk/streaming-parameter/src/SeedStreaming/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/streaming-parameter/src/SeedStreaming/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedStreaming.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/streaming/src/SeedStreaming/Core/JsonConfiguration.cs b/seed/csharp-sdk/streaming/src/SeedStreaming/Core/JsonConfiguration.cs index d10578fbded..c191d8473ac 100644 --- a/seed/csharp-sdk/streaming/src/SeedStreaming/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/streaming/src/SeedStreaming/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedStreaming.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/trace/src/SeedTrace/Core/JsonConfiguration.cs b/seed/csharp-sdk/trace/src/SeedTrace/Core/JsonConfiguration.cs index aef0117781d..79788c39454 100644 --- a/seed/csharp-sdk/trace/src/SeedTrace/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/trace/src/SeedTrace/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedTrace.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/trace/src/SeedTrace/Playlist/Requests/CreatePlaylistRequest.cs b/seed/csharp-sdk/trace/src/SeedTrace/Playlist/Requests/CreatePlaylistRequest.cs index ff47ed6b14d..1e70a06eb9a 100644 --- a/seed/csharp-sdk/trace/src/SeedTrace/Playlist/Requests/CreatePlaylistRequest.cs +++ b/seed/csharp-sdk/trace/src/SeedTrace/Playlist/Requests/CreatePlaylistRequest.cs @@ -11,6 +11,7 @@ public record CreatePlaylistRequest [JsonIgnore] public DateTime? OptionalDatetime { get; set; } + [JsonIgnore] public required PlaylistCreateRequest Body { get; set; } public override string ToString() diff --git a/seed/csharp-sdk/undiscriminated-unions/src/SeedUndiscriminatedUnions/Core/JsonConfiguration.cs b/seed/csharp-sdk/undiscriminated-unions/src/SeedUndiscriminatedUnions/Core/JsonConfiguration.cs index 488f87aa4ee..275e2f9026c 100644 --- a/seed/csharp-sdk/undiscriminated-unions/src/SeedUndiscriminatedUnions/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/undiscriminated-unions/src/SeedUndiscriminatedUnions/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedUndiscriminatedUnions.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/unions/no-custom-config/src/SeedUnions/Core/JsonConfiguration.cs b/seed/csharp-sdk/unions/no-custom-config/src/SeedUnions/Core/JsonConfiguration.cs index 602eaea1754..a0b8f69790a 100644 --- a/seed/csharp-sdk/unions/no-custom-config/src/SeedUnions/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/unions/no-custom-config/src/SeedUnions/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedUnions.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/unions/use-discriminated-unions/src/SeedUnions/Core/JsonConfiguration.cs b/seed/csharp-sdk/unions/use-discriminated-unions/src/SeedUnions/Core/JsonConfiguration.cs index 602eaea1754..a0b8f69790a 100644 --- a/seed/csharp-sdk/unions/use-discriminated-unions/src/SeedUnions/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/unions/use-discriminated-unions/src/SeedUnions/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedUnions.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/unknown/src/SeedUnknownAsAny/Core/JsonConfiguration.cs b/seed/csharp-sdk/unknown/src/SeedUnknownAsAny/Core/JsonConfiguration.cs index 538042a7234..090943589b6 100644 --- a/seed/csharp-sdk/unknown/src/SeedUnknownAsAny/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/unknown/src/SeedUnknownAsAny/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedUnknownAsAny.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/validation/src/SeedValidation/Core/JsonConfiguration.cs b/seed/csharp-sdk/validation/src/SeedValidation/Core/JsonConfiguration.cs index 1bcc8faa815..fba7ed7970a 100644 --- a/seed/csharp-sdk/validation/src/SeedValidation/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/validation/src/SeedValidation/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedValidation.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/variables/src/SeedVariables/Core/JsonConfiguration.cs b/seed/csharp-sdk/variables/src/SeedVariables/Core/JsonConfiguration.cs index 9374ebd2ce3..6aeb9c8563a 100644 --- a/seed/csharp-sdk/variables/src/SeedVariables/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/variables/src/SeedVariables/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedVariables.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/version-no-default/src/SeedVersion/Core/JsonConfiguration.cs b/seed/csharp-sdk/version-no-default/src/SeedVersion/Core/JsonConfiguration.cs index d1e2d54afe5..26ef5efa5af 100644 --- a/seed/csharp-sdk/version-no-default/src/SeedVersion/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/version-no-default/src/SeedVersion/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedVersion.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/version/src/SeedVersion/Core/JsonConfiguration.cs b/seed/csharp-sdk/version/src/SeedVersion/Core/JsonConfiguration.cs index d1e2d54afe5..26ef5efa5af 100644 --- a/seed/csharp-sdk/version/src/SeedVersion/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/version/src/SeedVersion/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedVersion.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) => diff --git a/seed/csharp-sdk/websocket/src/SeedWebsocket/Core/JsonConfiguration.cs b/seed/csharp-sdk/websocket/src/SeedWebsocket/Core/JsonConfiguration.cs index 9588ea58f98..13c2d08ff52 100644 --- a/seed/csharp-sdk/websocket/src/SeedWebsocket/Core/JsonConfiguration.cs +++ b/seed/csharp-sdk/websocket/src/SeedWebsocket/Core/JsonConfiguration.cs @@ -2,6 +2,7 @@ using global::System.Text.Json.Nodes; using global::System.Text.Json.Serialization; using global::System.Text.Json.Serialization.Metadata; +using CultureInfo = global::System.Globalization.CultureInfo; namespace SeedWebsocket.Core; @@ -57,6 +58,19 @@ static JsonOptions() throw new ArgumentOutOfRangeException(); } } + + var jsonIgnoreAttribute = propertyInfo + .AttributeProvider?.GetCustomAttributes( + typeof(JsonIgnoreAttribute), + true + ) + .OfType() + .FirstOrDefault(); + + if (jsonIgnoreAttribute is not null) + { + propertyInfo.IsRequired = false; + } } }, }, @@ -88,8 +102,25 @@ internal static byte[] SerializeToUtf8Bytes(T obj) => internal static string SerializeAsString(T obj) { - var json = JsonSerializer.Serialize(obj, JsonOptions.JsonSerializerOptions); - return json.Trim('"'); + return obj switch + { + null => "null", + string str => str, + true => "true", + false => "false", + int i => i.ToString(CultureInfo.InvariantCulture), + long l => l.ToString(CultureInfo.InvariantCulture), + float f => f.ToString(CultureInfo.InvariantCulture), + double d => d.ToString(CultureInfo.InvariantCulture), + decimal dec => dec.ToString(CultureInfo.InvariantCulture), + short s => s.ToString(CultureInfo.InvariantCulture), + ushort u => u.ToString(CultureInfo.InvariantCulture), + uint u => u.ToString(CultureInfo.InvariantCulture), + ulong u => u.ToString(CultureInfo.InvariantCulture), + char c => c.ToString(CultureInfo.InvariantCulture), + Guid guid => guid.ToString("D"), + _ => Serialize(obj).Trim('"'), + }; } internal static T Deserialize(string json) =>