From a1f49d729fb38e1e18d982d81a58e1e4ba054a94 Mon Sep 17 00:00:00 2001 From: Xaver Schulz Date: Mon, 30 Oct 2023 09:27:22 +0100 Subject: [PATCH] generate seperate type definitions for empty objects from sample data (#1633) fix #1415 --- .../Schema/JsonSchemaTests.cs | 24 +++++++++++++++++++ src/NJsonSchema/SampleJsonSchemaGenerator.cs | 1 + 2 files changed, 25 insertions(+) diff --git a/src/NJsonSchema.Tests/Schema/JsonSchemaTests.cs b/src/NJsonSchema.Tests/Schema/JsonSchemaTests.cs index 30b838394..9a1eec633 100644 --- a/src/NJsonSchema.Tests/Schema/JsonSchemaTests.cs +++ b/src/NJsonSchema.Tests/Schema/JsonSchemaTests.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using System.Text.RegularExpressions; using System.Threading.Tasks; using Newtonsoft.Json.Linq; using Xunit; @@ -425,5 +426,28 @@ public async Task When_azure_schema_is_loaded_then_no_exception() Assert.NotNull(schema); Assert.Contains("The identity type.", json); } + + [Fact] + public void When_there_are_multiple_empty_objects_in_json_sample_data_generate_different_type_definitions_foreach() + { + //https://github.com/RicoSuter/NJsonSchema/issues/1415 + + var schema = JsonSchema.FromSampleJson(@" + [ + { + ""Data"": { + ""EmptyObj"": {}, + ""ArrayObj"": { + ""AnotherEmptyObj"": {} + } + } + } + ] + "); + + var json = schema.ToJson(); + + Assert.Equal(3, Regex.Matches(json, "AnotherEmptyObj").Count); + } } } diff --git a/src/NJsonSchema/SampleJsonSchemaGenerator.cs b/src/NJsonSchema/SampleJsonSchemaGenerator.cs index 37a7c51c1..f17db036b 100644 --- a/src/NJsonSchema/SampleJsonSchemaGenerator.cs +++ b/src/NJsonSchema/SampleJsonSchemaGenerator.cs @@ -67,6 +67,7 @@ private void Generate(JToken token, JsonSchema schema, JsonSchema rootSchema, st .Select(t => t.Value) .FirstOrDefault(s => s.Type == JsonObjectType.Object && + properties.Any() && properties.All(p => s.Properties.ContainsKey(p.Name))); }