Skip to content

Commit 09ae18c

Browse files
committed
chore: refactor to avoid duplicate deserialization logic
Signed-off-by: Vincent Biret <vibiret@microsoft.com>
1 parent 8d811c3 commit 09ae18c

1 file changed

Lines changed: 5 additions & 99 deletions

File tree

src/Microsoft.OpenApi/Models/JsonSchemaReference.cs

Lines changed: 5 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -552,107 +552,13 @@ private static void WriteSchemaType(IOpenApiWriter writer, string name, JsonSche
552552
}
553553

554554
/// <inheritdoc/>
555+
[Obsolete("Use ApplySchemaMetadata instead.")]
556+
#pragma warning disable CS0809 // Obsolete member overrides non-obsolete member
555557
protected override void SetAdditional31MetadataFromMapNode(JsonObject jsonObject)
558+
#pragma warning restore CS0809 // Obsolete member overrides non-obsolete member
556559
{
557-
base.SetAdditional31MetadataFromMapNode(jsonObject);
558-
559-
var title = GetPropertyValueFromNode(jsonObject, OpenApiConstants.Title);
560-
if (!string.IsNullOrEmpty(title))
561-
{
562-
Title = title;
563-
}
564-
565-
// Boolean properties
566-
if (jsonObject.TryGetPropertyValue(OpenApiConstants.Deprecated, out var deprecatedNode) && deprecatedNode is JsonValue deprecatedValue && deprecatedValue.TryGetValue<bool>(out var deprecated))
567-
{
568-
Deprecated = deprecated;
569-
}
570-
571-
if (jsonObject.TryGetPropertyValue(OpenApiConstants.ReadOnly, out var readOnlyNode) && readOnlyNode is JsonValue readOnlyValue && readOnlyValue.TryGetValue<bool>(out var readOnly))
572-
{
573-
ReadOnly = readOnly;
574-
}
575-
576-
if (jsonObject.TryGetPropertyValue(OpenApiConstants.WriteOnly, out var writeOnlyNode) && writeOnlyNode is JsonValue writeOnlyValue && writeOnlyValue.TryGetValue<bool>(out var writeOnly))
577-
{
578-
WriteOnly = writeOnly;
579-
}
580-
581-
// Default value
582-
if (jsonObject.TryGetPropertyValue(OpenApiConstants.Default, out var defaultNode))
583-
{
584-
Default = defaultNode;
585-
}
586-
587-
// Examples
588-
if (jsonObject.TryGetPropertyValue(OpenApiConstants.Examples, out var examplesNode) && examplesNode is JsonArray examplesArray)
589-
{
590-
Examples = examplesArray.OfType<JsonNode>().ToList();
591-
}
592-
593-
// Extensions (properties starting with "x-")
594-
foreach (var property in jsonObject
595-
.Where(static p => p.Key.StartsWith(OpenApiConstants.ExtensionFieldNamePrefix, StringComparison.OrdinalIgnoreCase)
596-
&& p.Value is not null))
597-
{
598-
var extensionValue = property.Value!;
599-
Extensions ??= new Dictionary<string, IOpenApiExtension>(StringComparer.OrdinalIgnoreCase);
600-
Extensions[property.Key] = new JsonNodeExtension(extensionValue.DeepClone());
601-
}
602-
603-
// JSON Schema 2020-12 keyword siblings ($defs is parsed separately in the deserializer
604-
// because it requires LoadSchema for nested schema materialization)
605-
var id = GetPropertyValueFromNode(jsonObject, OpenApiConstants.Id);
606-
if (!string.IsNullOrEmpty(id))
607-
{
608-
SchemaId = id;
609-
}
610-
611-
var schemaValue = GetPropertyValueFromNode(jsonObject, OpenApiConstants.DollarSchema);
612-
if (!string.IsNullOrEmpty(schemaValue) && Uri.TryCreate(schemaValue, UriKind.Absolute, out var schemaUri))
613-
{
614-
Schema = schemaUri;
615-
}
616-
617-
var comment = GetPropertyValueFromNode(jsonObject, OpenApiConstants.Comment);
618-
if (!string.IsNullOrEmpty(comment))
619-
{
620-
Comment = comment;
621-
}
622-
623-
var dynamicRef = GetPropertyValueFromNode(jsonObject, OpenApiConstants.DynamicRef);
624-
if (!string.IsNullOrEmpty(dynamicRef))
625-
{
626-
DynamicRef = dynamicRef;
627-
}
628-
629-
var dynamicAnchor = GetPropertyValueFromNode(jsonObject, OpenApiConstants.DynamicAnchor);
630-
if (!string.IsNullOrEmpty(dynamicAnchor))
631-
{
632-
DynamicAnchor = dynamicAnchor;
633-
}
634-
635-
var anchor = GetPropertyValueFromNode(jsonObject, OpenApiConstants.Anchor);
636-
if (!string.IsNullOrEmpty(anchor))
637-
{
638-
Anchor = anchor;
639-
}
640-
641-
if (jsonObject.TryGetPropertyValue(OpenApiConstants.Vocabulary, out var vocabNode) && vocabNode is JsonObject vocabObj)
642-
{
643-
var vocab = new Dictionary<string, bool>();
644-
foreach (var kvp in vocabObj)
645-
{
646-
if (kvp.Value is JsonValue v && v.TryGetValue<bool>(out var b))
647-
{
648-
vocab[kvp.Key] = b;
649-
}
650-
}
651-
if (vocab.Count > 0)
652-
{
653-
Vocabulary = vocab;
654-
}
655-
}
560+
//TODO remove this method in next major release
561+
// no-op: we're using ApplySchemaMetadata
656562
}
657563

658564
internal void ApplySchemaMetadata(OpenApiSchema schema, JsonObject jsonObject)

0 commit comments

Comments
 (0)