diff --git a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs index 0a47dfae3..91e8a9cb0 100644 --- a/src/Microsoft.OpenApi/Models/OpenApiSchema.cs +++ b/src/Microsoft.OpenApi/Models/OpenApiSchema.cs @@ -442,13 +442,25 @@ internal void SerializeAsV2( throw Error.ArgumentNull(nameof(writer)); } - - if (Reference != null && writer.GetSettings().ReferenceInline != ReferenceInlineSetting.InlineLocalReferences) + if (Reference != null) { - Reference.SerializeAsV2(writer); - return; + var settings = writer.GetSettings(); + if (settings.ReferenceInline != ReferenceInlineSetting.InlineLocalReferences) + { + Reference.SerializeAsV2(writer); + return; + } + + // If Loop is detected then just Serialize as a reference. + if (!settings.LoopDetector.PushLoop(this)) + { + settings.LoopDetector.SaveLoop(this); + Reference.SerializeAsV3(writer); + return; + } } + if (parentRequiredProperties == null) { parentRequiredProperties = new HashSet();