The current implementation of the JsonSchemaExporter generates schemas for types based on its on semantics. There's currently not strategy for types/converters to advertise their associated JSON schemas.
This gap has presented a blocker for a couple of scenarios in ASP.NET Core's OpenAPI support around JSON schema.
- gRPC's JSON transcoding layer needs to represent schemas for types based on the underlying protobuf representation instead of the generated C# implementation.
- Types that implement a custom converter are not able to define a schema and are represented by the catch-all
true schema.
While both System.Text.Json and ASP.NET Core expose APIs for modifying schemas at different layers of the stack, both approaches are reactive and allow mutating the schema that is generated instead of proactively dictating the schema that should be set.
Solutions that have been discussed in the past includ exposing a new IJsonSchemaResolver interface for type owners to implement:
public interface IJsonSchemaResolver
{
JsonSchema GetJsonSchema(JsonTypeInfo typeInfo);
JsonSchema GetJsonSchema(JsonPropertyInfo propertyInfo);
}
Or alternatively including a new virtual method on the JsonConverter to define associated schemas:
public class JsonConverter
{
public virtual JsonSchema? GetSchema(JsonSerializerOptions options) => ...
}
cc: @JamesNK @eiriktsarpalis
The current implementation of the
JsonSchemaExportergenerates schemas for types based on its on semantics. There's currently not strategy for types/converters to advertise their associated JSON schemas.This gap has presented a blocker for a couple of scenarios in ASP.NET Core's OpenAPI support around JSON schema.
trueschema.While both System.Text.Json and ASP.NET Core expose APIs for modifying schemas at different layers of the stack, both approaches are reactive and allow mutating the schema that is generated instead of proactively dictating the schema that should be set.
Solutions that have been discussed in the past includ exposing a new
IJsonSchemaResolverinterface for type owners to implement:Or alternatively including a new virtual method on the JsonConverter to define associated schemas:
cc: @JamesNK @eiriktsarpalis