diff --git a/src/NJsonSchema.Tests/Generation/AttributeGenerationTests.cs b/src/NJsonSchema.Tests/Generation/AttributeGenerationTests.cs index e324870a4..9006db557 100644 --- a/src/NJsonSchema.Tests/Generation/AttributeGenerationTests.cs +++ b/src/NJsonSchema.Tests/Generation/AttributeGenerationTests.cs @@ -354,5 +354,24 @@ public void When_property_has_required_keyword_then_it_is_required_in_Newtonsoft Assert.DoesNotContain("Optional", schema.RequiredProperties); } #endif + +#if NET6_0_OR_GREATER + [Display(Name = "My Title", Description = "My Description")] + public class ClassWithDisplayAttribute + { + public string Foo { get; set; } + } + + [Fact] + public void When_class_has_Display_Name_then_schema_title_is_set() + { + // Act + var schema = NewtonsoftJsonSchemaGenerator.FromType(); + + // Assert + Assert.Equal("My Title", schema.Title); + Assert.Equal("My Description", schema.Description); + } +#endif } } \ No newline at end of file diff --git a/src/NJsonSchema/Generation/JsonSchemaGenerator.cs b/src/NJsonSchema/Generation/JsonSchemaGenerator.cs index 25559c7e5..ff4d7504d 100644 --- a/src/NJsonSchema/Generation/JsonSchemaGenerator.cs +++ b/src/NJsonSchema/Generation/JsonSchemaGenerator.cs @@ -545,6 +545,17 @@ protected virtual void GenerateObject(JsonSchema schema, JsonTypeDescription typ schema.Description = type.ToCachedType().GetDescription(Settings); schema.Example = GenerateExample(type.ToContextualType()); + dynamic? displayAttribute = type.GetCustomAttributes(false) + .FirstAssignableToTypeNameOrDefault("System.ComponentModel.DataAnnotations.DisplayAttribute"); + if (displayAttribute != null) + { + string? name = displayAttribute.GetName(); + if (name != null) + { + schema.Title = name; + } + } + dynamic? obsoleteAttribute = type.GetCustomAttributes(false).FirstAssignableToTypeNameOrDefault("System.ObsoleteAttribute"); if (obsoleteAttribute != null) {