Skip to content

Commit 89fb3b2

Browse files
authored
Merge pull request #19 from IvanMurzak/feature/dictionary-json-schema-ignore
feat: enhance schema generation to support value types for additional…
2 parents f9e601f + e2a79fa commit 89fb3b2

2 files changed

Lines changed: 26 additions & 8 deletions

File tree

ReflectorNet/src/Utils/Json/JsonSchema.Internal.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ JsonNode GenerateSchemaFromType(Reflector reflector, Type type, JsonObject defin
125125
if (defines.ContainsKey(typeId) == false)
126126
{
127127
// Add placeholder first to prevent infinite recursion
128+
defines[typeId] = new JsonObject { [Type] = Array };
128129
defines[typeId] = new JsonObject
129130
{
130131
[Type] = Array,

ReflectorNet/src/Utils/Json/JsonSchema.cs

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -145,9 +145,6 @@ public JsonNode GetSchema(Reflector reflector, Type type, JsonObject? defines =
145145

146146
schema = schemeConvertor.GetSchema();
147147

148-
if (definesNeeded && !defineContainsType)
149-
defines[typeId] = schema;
150-
151148
foreach (var defType in schemeConvertor.GetDefinedTypes())
152149
{
153150
var defTypeId = defType.GetSchemaTypeId();
@@ -182,23 +179,43 @@ public JsonNode GetSchema(Reflector reflector, Type type, JsonObject? defines =
182179
defines[defTypeId] = defSchema;
183180
}
184181

182+
// Add placeholder to prevent infinite recursion
185183
if (definesNeeded && !defineContainsType)
186-
defines[typeId] = schema;
184+
defines[typeId] = new JsonObject { [Type] = Object };
187185

188-
schema = new JsonObject { [Type] = Object, [AdditionalProperties] = true };
186+
if (genericArgs.Length >= 2)
187+
{
188+
// Use the value type's schema for additionalProperties
189+
var valueTypeSchema = GetSchema(reflector, genericArgs[1], defines);
190+
schema = new JsonObject { [Type] = Object, [AdditionalProperties] = valueTypeSchema };
191+
}
192+
else
193+
{
194+
schema = new JsonObject { [Type] = Object, [AdditionalProperties] = true };
195+
}
189196
}
190197
else
191198
{
192-
schema = GenerateSchemaFromType(reflector, type, defines);
199+
// Add placeholder to prevent infinite recursion
200+
if (definesNeeded && !defineContainsType)
201+
defines[typeId] = new JsonObject { [Type] = Object };
193202

194-
if (definesNeeded && defines.Count > 0)
195-
schema[Defs] = defines;
203+
schema = GenerateSchemaFromType(reflector, type, defines);
196204
}
197205

198206
// Get description from the type if available
199207
var description = TypeUtils.GetDescription(type);
200208
if (!string.IsNullOrEmpty(description))
201209
schema[Description] = JsonValue.Create(description);
210+
211+
if (definesNeeded)
212+
{
213+
if (!defineContainsType)
214+
defines[typeId] = schema.DeepClone();
215+
216+
if (defines.Count > 0)
217+
schema[Defs] = defines;
218+
}
202219
}
203220
catch (Exception ex)
204221
{

0 commit comments

Comments
 (0)