Skip to content

Commit 6043551

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

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
@@ -561,107 +561,13 @@ private static void WriteSchemaType(IOpenApiWriter writer, string name, JsonSche
561561
}
562562

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

667573
internal void ApplySchemaMetadata(OpenApiSchema schema, JsonObject jsonObject)

0 commit comments

Comments
 (0)