@@ -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