diff --git a/tools/Umbraco.JsonSchema/Umbraco.JsonSchema.csproj b/tools/Umbraco.JsonSchema/Umbraco.JsonSchema.csproj
index fbdc44a834..7771d9c195 100644
--- a/tools/Umbraco.JsonSchema/Umbraco.JsonSchema.csproj
+++ b/tools/Umbraco.JsonSchema/Umbraco.JsonSchema.csproj
@@ -8,7 +8,6 @@
-
diff --git a/tools/Umbraco.JsonSchema/UmbracoCmsSchema.cs b/tools/Umbraco.JsonSchema/UmbracoCmsSchema.cs
index f2b3bacdb9..e72be015a1 100644
--- a/tools/Umbraco.JsonSchema/UmbracoCmsSchema.cs
+++ b/tools/Umbraco.JsonSchema/UmbracoCmsSchema.cs
@@ -37,6 +37,7 @@ internal class UmbracoCmsSchema
public ImagingSettings Imaging { get; set; } = null!;
public IndexCreatorSettings Examine { get; set; } = null!;
+
public IndexingSettings Indexing { get; set; } = null!;
public LoggingSettings Logging { get; set; } = null!;
diff --git a/tools/Umbraco.JsonSchema/UmbracoJsonSchemaGenerator.cs b/tools/Umbraco.JsonSchema/UmbracoJsonSchemaGenerator.cs
index cc5e0f812c..1bfe554a4b 100644
--- a/tools/Umbraco.JsonSchema/UmbracoJsonSchemaGenerator.cs
+++ b/tools/Umbraco.JsonSchema/UmbracoJsonSchemaGenerator.cs
@@ -1,8 +1,8 @@
-using Newtonsoft.Json;
-using Newtonsoft.Json.Converters;
-using Newtonsoft.Json.Serialization;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using Namotion.Reflection;
+using NJsonSchema;
using NJsonSchema.Generation;
-using NJsonSchema.NewtonsoftJson.Generation;
///
public class UmbracoJsonSchemaGenerator : JsonSchemaGenerator
@@ -11,28 +11,41 @@ public class UmbracoJsonSchemaGenerator : JsonSchemaGenerator
/// Initializes a new instance of the class.
///
public UmbracoJsonSchemaGenerator()
- : base(new NewtonsoftJsonSchemaGeneratorSettings()
+ : base(new SystemTextJsonSchemaGeneratorSettings()
{
AlwaysAllowAdditionalObjectProperties = true,
- DefaultReferenceTypeNullHandling = ReferenceTypeNullHandling.NotNull,
FlattenInheritanceHierarchy = true,
IgnoreObsoleteProperties = true,
- SerializerSettings = new JsonSerializerSettings()
+ ReflectionService = new UmbracoSystemTextJsonReflectionService(),
+ SerializerOptions = new JsonSerializerOptions()
{
- ContractResolver = new WritablePropertiesOnlyResolver()
- }
+ Converters =
+ {
+ new JsonStringEnumConverter()
+ },
+ WriteIndented = true,
+ },
})
- {
-
-
- ((NewtonsoftJsonSchemaGeneratorSettings)Settings).SerializerSettings.Converters.Add(new StringEnumConverter());
- }
+ { }
///
- private class WritablePropertiesOnlyResolver : DefaultContractResolver
+ private class UmbracoSystemTextJsonReflectionService : SystemTextJsonReflectionService
{
///
- protected override IList CreateProperties(Type type, MemberSerialization memberSerialization)
- => base.CreateProperties(type, memberSerialization).Where(p => p.Writable).ToList();
+ public override void GenerateProperties(JsonSchema schema, ContextualType contextualType, SystemTextJsonSchemaGeneratorSettings settings, JsonSchemaGenerator schemaGenerator, JsonSchemaResolver schemaResolver)
+ {
+ base.GenerateProperties(schema, contextualType, settings, schemaGenerator, schemaResolver);
+
+ // Remove read-only properties
+ foreach (ContextualPropertyInfo property in contextualType.Properties)
+ {
+ if (property.CanWrite is false)
+ {
+ string propertyName = GetPropertyName(property, settings);
+
+ schema.Properties.Remove(propertyName);
+ }
+ }
+ }
}
}