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