diff --git a/Directory.Build.props b/Directory.Build.props index 2d54a4ded..8ecbb51d6 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -35,30 +35,12 @@ latest-Recommended true - $(NoWarn);IDE0008;IDE0021;IDE0022;IDE0029;IDE0032;IDE0039;IDE0045;IDE0046;IDE0055;IDE0057;IDE0059;IDE0060;IDE0090;IDE0130;IDE0160;IDE0290;CA1200;CA1510;CA1716;CA1720;CA1870;CA2263 + $(NoWarn);CA1200;CA1510;CA1716;CA1720 diff --git a/src/NJsonSchema/DefaultTypeNameGenerator.cs b/src/NJsonSchema/DefaultTypeNameGenerator.cs index 499e2f2b8..d0618e3be 100644 --- a/src/NJsonSchema/DefaultTypeNameGenerator.cs +++ b/src/NJsonSchema/DefaultTypeNameGenerator.cs @@ -6,6 +6,7 @@ // Rico Suter, mail@rsuter.com //----------------------------------------------------------------------- +using System.Buffers; using System.Text; using System.Text.RegularExpressions; @@ -14,7 +15,13 @@ namespace NJsonSchema /// Converts the last part of the full type name to upper case. public class DefaultTypeNameGenerator : ITypeNameGenerator { - private static readonly char[] TypeNameHintCleanupChars = ['[', ']', '<', '>', ',', ' ']; + private static readonly char[] _typeNameHintCleanupChars = ['[', ']', '<', '>', ',', ' ']; + +#if NET8_0_OR_GREATER + private static readonly SearchValues TypeNameHintCleanupChars = SearchValues.Create(_typeNameHintCleanupChars); +#else + private static readonly char[] TypeNameHintCleanupChars = _typeNameHintCleanupChars; +#endif private readonly Dictionary _typeNameMappings = []; private string[] _reservedTypeNames = ["object"]; @@ -36,13 +43,14 @@ public virtual string Generate(JsonSchema schema, string? typeNameHint, IEnumera { if (string.IsNullOrEmpty(typeNameHint) && !string.IsNullOrEmpty(schema.DocumentPath)) { - typeNameHint = schema.DocumentPath!.Replace("\\", "/").Split('/').Last(); + var parts = schema.DocumentPath!.Replace("\\", "/").Split('/'); + typeNameHint = parts[^1]; } typeNameHint ??= ""; // check with one pass before doing iterations - var requiresCleanup = !string.IsNullOrEmpty(typeNameHint) && typeNameHint.IndexOfAny(TypeNameHintCleanupChars) != -1; + var requiresCleanup = typeNameHint.AsSpan().IndexOfAny(TypeNameHintCleanupChars) != -1; if (requiresCleanup) { diff --git a/src/NJsonSchema/JsonSchema.Serialization.cs b/src/NJsonSchema/JsonSchema.Serialization.cs index 95fc901b5..6cec6c178 100644 --- a/src/NJsonSchema/JsonSchema.Serialization.cs +++ b/src/NJsonSchema/JsonSchema.Serialization.cs @@ -22,10 +22,14 @@ namespace NJsonSchema [JsonConverter(typeof(ExtensionDataDeserializationConverter))] public partial class JsonSchema : IJsonExtensionObject { - private static readonly JsonObjectType[] _jsonObjectTypeValues = Enum.GetValues(typeof(JsonObjectType)) - .OfType() - .Where(v => v != JsonObjectType.None) - .ToArray(); + internal static readonly List JsonObjectTypes = +#if NET8_0_OR_GREATER + Enum.GetValues() +#else + Enum.GetValues(typeof(JsonObjectType)).Cast() +#endif + .Where(static v => v != JsonObjectType.None) + .ToList(); // keep a reference so we don't need to create a delegate each time @@ -331,7 +335,7 @@ private void ResetTypeRaw() { _typeRaw = new Lazy(() => { - var flags = _jsonObjectTypeValues + var flags = JsonObjectTypes .Where(v => Type.HasFlag(v)) .ToArray(); diff --git a/src/NJsonSchema/Validation/JsonSchemaValidator.cs b/src/NJsonSchema/Validation/JsonSchemaValidator.cs index 66a39af7c..e32035529 100644 --- a/src/NJsonSchema/Validation/JsonSchemaValidator.cs +++ b/src/NJsonSchema/Validation/JsonSchemaValidator.cs @@ -126,15 +126,9 @@ private void ValidateType(JToken token, JsonSchema schema, SchemaType schemaType } } - private static readonly IEnumerable JsonObjectTypes = Enum - .GetValues(typeof(JsonObjectType)) - .Cast() - .Where(t => t != JsonObjectType.None) - .ToList(); - private static IEnumerable GetTypes(JsonSchema schema) { - return JsonObjectTypes.Where(t => schema.Type.HasFlag(t)); + return JsonSchema.JsonObjectTypes.Where(t => schema.Type.HasFlag(t)); } private void ValidateAnyOf(JToken token, JsonSchema schema, string? propertyName, string propertyPath, List errors)