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); + } + } + } } }