Сериализация JsonDocument для реестра схемы Kafka, если тип CLR неизвестенC#

Место общения программистов C#
Ответить
Anonymous
 Сериализация JsonDocument для реестра схемы Kafka, если тип CLR неизвестен

Сообщение Anonymous »

Я пытаюсь сериализовать данные типа JsonDocument в реестр схемы Kafka. Предположим, что данные, которые я получаю, представляют собой строку JSON, и у меня нет типа CLR. Я не знаю тип CLR, поскольку он может быть получен из другого приложения.

Код: Выделить всё

var schemaRegistryConfig = new SchemaRegistryConfig
{
Url = "http://localhost:8081"
};

using var schemaRegistry = new CachedSchemaRegistryClient(schemaRegistryConfig);

var producerConfig = new ProducerConfig
{
BootstrapServers = "localhost:9094"
};

var jsonSerializerConfig = new JsonSerializerConfig
{
AutoRegisterSchemas = true
};

using var producer = new ProducerBuilder(producerConfig)
.SetKeySerializer(Serializers.Utf8)
.SetValueSerializer(new JsonSerializer(schemaRegistry, jsonSerializerConfig))
.Build();

const string jsonString = """{ "name": "John Doe", "age": 30 }""";
using var jsonDocument = JsonDocument.Parse(jsonString);

JsonElement rootElement = jsonDocument.RootElement;
var jsonBytes = JsonSerializer.SerializeToUtf8Bytes(rootElement);

var message = new Message
{
Key = "key1",
Value = jsonBytes
};

var deliveryResult = await producer.ProduceAsync("your-topic", message);

Console.WriteLine($"Delivered message to '{deliveryResult.TopicPartitionOffset}'");
Кажется, это работает, но создается такая схема:

Код: Выделить всё

{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Byte[]",
"type": "string",
"format": "byte"
}
И значение было закодировано 'eyJuYW1lIjoiSm9obiBEb2UiLCJhZ2UiOjMwfQ=='
Я могу использовать и десериализовать запись, но не уверен, что сделал это это правильно. Кроме того, схема и значение выглядят странно. Я ожидаю, что в схеме будет поле свойств, содержащее поля имени и возраста с их типами. Однако я до сих пор не понимаю, почему это работает.

Подробнее здесь: https://stackoverflow.com/questions/788 ... is-unknown
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»