Skip to content

OpenApiSchema System.Text.Json (De)Serialization #2299

Description

@Poltuu

Is your feature request related to a problem? Please describe.
Default System.Text.Json Serialization of OpenApiJsonSchema is verbose (complete) and unsatisfying.

Describe the solution you'd like
A simple way to fix it, probably via a JsonConverter, either by default or to configure on AddMVC json options.

Describe alternatives you've considered

Otherwise, OpenApiSchema could support direct serialization to a JsonWriter:

Additional context
Turns out I did it in my projects, and I also just really wanted to know if this was appropriate, or I missed something available

internalclassSchemaConverter:System.Text.Json.Serialization.JsonConverter<OpenApiSchema>{privatestaticreadonlyConcurrentDictionary<int,JsonSerializerOptions>_jsonSerializerCache=new();publicoverrideOpenApiSchemaRead(refUtf8JsonReaderreader,TypetypeToConvert,JsonSerializerOptionsoptions){varcorrectedOptions=_jsonSerializerCache.GetOrAdd(options.GetHashCode(), _ =>{varoptionsCopy=newJsonSerializerOptions(options);optionsCopy.Converters.Remove(options.Converters.First(c =>cisSchemaConverter));returnoptionsCopy;});returnJsonSerializer.Deserialize<OpenApiSchema>(refreader,correctedOptions)!;}publicoverridevoidWrite(Utf8JsonWriterwriter,OpenApiSchemavalue,JsonSerializerOptionsoptions){usingvarmemoryStream=newMemoryStream();using(vartextWriter=newStreamWriter(memoryStream,leaveOpen:true)){value.SerializeAsV31(newOpenApiJsonWriter(textWriter));textWriter.Flush();}memoryStream.Position=0;writer.WriteRawValue(memoryStream.ToArray());}}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions