public async Task <byte[]> SerializeAsync(T data, SerializationContext context) { var json = JsonSerializer.Serialize(data, new JsonSerializerOptions // TODO: Make this configurable { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, }); var subjectName = $"{context.Topic}-{context.Component.ToString().ToLower()}"; var subjectVersions = await _schemaRegistryClient.ListSchemaVersionsAsync(subjectName, CancellationToken.None); if (subjectVersions != null && subjectVersions.Any()) { var version = subjectVersions.Last(); var schemaDetails = await _schemaRegistryClient.GetSchemaAsync(subjectName, version, CancellationToken.None); if (!schemaDetails.SchemaType.Equals("JSON", StringComparison.InvariantCultureIgnoreCase)) { throw new KafkaSerializationException($"Unable to verify schema for subject {subjectName}, version {version}, " + $"as the schema is {schemaDetails.SchemaType} but expected JSON"); } var schema = await JsonSchema.FromJsonAsync(schemaDetails.Schema); var validationErrors = schema.Validate(json); if (validationErrors.Any()) { var validationErrorStrings = validationErrors.Select(err => err.ToString()).ToArray(); throw new KafkaJsonSchemaSerializationException(validationErrorStrings); } } return(Encoding.UTF8.GetBytes(json)); }