diff --git a/ReflectorNet.Tests/src/SchemaTests/TestSchemaTypeId.cs b/ReflectorNet.Tests/src/SchemaTests/TestSchemaTypeId.cs index 06372e5..4564f79 100644 --- a/ReflectorNet.Tests/src/SchemaTests/TestSchemaTypeId.cs +++ b/ReflectorNet.Tests/src/SchemaTests/TestSchemaTypeId.cs @@ -18,7 +18,7 @@ public void GetSchemaTypeId_SimpleArray_ShouldAppendArray() var result = type.GetSchemaTypeId(); // Assert - Assert.Equal($"System.Int32{TypeUtils.ArraySuffix}", result); + Assert.Equal("System.Int32%5B%5D", result); _output.WriteLine($"int[] -> {result}"); } @@ -32,7 +32,7 @@ public void GetSchemaTypeId_NestedArray_ShouldAppendMultipleArrays() var result = type.GetSchemaTypeId(); // Assert - Assert.Equal($"System.Int32{TypeUtils.ArraySuffix}{TypeUtils.ArraySuffix}", result); + Assert.Equal("System.Int32%5B%5D%5B%5D", result); _output.WriteLine($"int[][] -> {result}"); } @@ -46,7 +46,7 @@ public void GetSchemaTypeId_TripleNestedArray_ShouldAppendThreeArrays() var result = type.GetSchemaTypeId(); // Assert - Assert.Equal($"System.Int32{TypeUtils.ArraySuffix}{TypeUtils.ArraySuffix}{TypeUtils.ArraySuffix}", result); + Assert.Equal("System.Int32%5B%5D%5B%5D%5B%5D", result); _output.WriteLine($"int[][][] -> {result}"); } @@ -60,7 +60,7 @@ public void GetSchemaTypeId_StringArray_ShouldWorkForAnyType() var result = type.GetSchemaTypeId(); // Assert - Assert.Equal($"System.String{TypeUtils.ArraySuffix}", result); + Assert.Equal("System.String%5B%5D", result); _output.WriteLine($"string[] -> {result}"); } @@ -102,7 +102,7 @@ public void GetSchemaTypeId_NullableArrayType_ShouldHandleUnderlyingArrayType() var result = type.GetSchemaTypeId(); // Assert - Assert.Equal($"System.Int32{TypeUtils.ArraySuffix}", result); + Assert.Equal("System.Int32%5B%5D", result); _output.WriteLine($"int?[] -> {result}"); } @@ -116,7 +116,7 @@ public void GetSchemaTypeId_IEnumerableOfInt_ShouldReturnGenericFormat() var result = type.GetSchemaTypeId(); // Assert - Assert.Equal("System.Collections.Generic.IEnumerable", result); + Assert.Equal("System.Collections.Generic.IEnumerable%3CSystem.Int32%3E", result); _output.WriteLine($"IEnumerable -> {result}"); } @@ -130,7 +130,7 @@ public void GetSchemaTypeId_ICollectionOfString_ShouldReturnGenericFormat() var result = type.GetSchemaTypeId(); // Assert - Assert.Equal("System.Collections.Generic.ICollection", result); + Assert.Equal("System.Collections.Generic.ICollection%3CSystem.String%3E", result); _output.WriteLine($"ICollection -> {result}"); } @@ -144,7 +144,7 @@ public void GetSchemaTypeId_IListOfInt_ShouldReturnGenericFormat() var result = type.GetSchemaTypeId(); // Assert - Assert.Equal("System.Collections.Generic.IList", result); + Assert.Equal("System.Collections.Generic.IList%3CSystem.Int32%3E", result); _output.WriteLine($"IList -> {result}"); } @@ -172,7 +172,7 @@ public void GetSchemaTypeId_ArrayOfCustomClass_ShouldAppendArray() var result = type.GetSchemaTypeId(); // Assert - Assert.Equal($"com.IvanMurzak.ReflectorNet.Tests.SchemaTests.TestType{TypeUtils.ArraySuffix}", result); + Assert.Equal("com.IvanMurzak.ReflectorNet.Tests.SchemaTests.TestType%5B%5D", result); _output.WriteLine($"TestType[] -> {result}"); } } diff --git a/ReflectorNet/src/Utils/TypeUtils.Name.cs b/ReflectorNet/src/Utils/TypeUtils.Name.cs index feeaf50..79268f8 100644 --- a/ReflectorNet/src/Utils/TypeUtils.Name.cs +++ b/ReflectorNet/src/Utils/TypeUtils.Name.cs @@ -115,8 +115,20 @@ public static string GetTypeId(Type type) return Sanitize(type); } - public static string GetSchemaTypeId() => GetTypeId(typeof(T)); - public static string GetSchemaTypeId(Type type) => GetTypeId(type); + public static string GetSchemaTypeId() => GetSchemaTypeId(typeof(T)); + public static string GetSchemaTypeId(Type type) + { + var typeId = GetTypeId(type); + return SanitizeForJsonSchemaRef(typeId); + } + + private static string SanitizeForJsonSchemaRef(string typeId) + { + if (string.IsNullOrEmpty(typeId)) + return typeId; + return typeId.Replace("[", "%5B").Replace("]", "%5D") + .Replace("<", "%3C").Replace(">", "%3E"); + } public static bool IsNameMatch(Type? type, string? typeName) {