Я нашел больше информации, попробовав что-то, что не сработало, а затем нашел исходный код, посмотрев на стек вызовов исключений.
В моем случае поддерживаемые типы свойств, похоже, получены изчто поддерживает протокол AMQP (что задокументировано здесь ).На самом деле во внутреннем AmqpMessageConverter
коде есть большой оператор switch, который дает мне мой ответ:
AmqpMessageConverter.TryGetAmqpObjectFromNetObject
Подводя итог:
- Все типы примитивов .NET (
int
, string
, double
и т. Д.) Guid
DateTime
и DateTimeOffset
Stream
Uri
TimeSpan
byte[]
IList
IDictionary
Мой собственный пользовательский тип (POCO - «Простой старый объект CLR») не был принят и привел к следующему исключению:
System.Runtime.Serialization.SerializationException: Serialization operation failed due to unsupported type EventHubsTesting.Program+Poco.
at Microsoft.Azure.EventHubs.Amqp.AmqpMessageConverter.TryGetAmqpObjectFromNetObject(Object netObject, MappingType mappingType, Object& amqpObject)
at Microsoft.Azure.EventHubs.Amqp.AmqpMessageConverter.UpdateAmqpMessageHeadersAndProperties(AmqpMessage message, String publisher, EventData eventData, Boolean copyUserProperties)
at Microsoft.Azure.EventHubs.Amqp.AmqpMessageConverter.EventDataToAmqpMessage(EventData eventData)
at Microsoft.Azure.EventHubs.Amqp.AmqpMessageConverter.EventDatasToAmqpMessage(IEnumerable`1 eventDatas, String partitionKey)
at Microsoft.Azure.EventHubs.Amqp.AmqpEventDataSender.OnSendAsync(IEnumerable`1 eventDatas, String partitionKey)
at Microsoft.Azure.EventHubs.EventDataSender.SendAsync(IEnumerable`1 eventDatas, String partitionKey)
at Microsoft.Azure.EventHubs.EventHubClient.SendAsync(IEnumerable`1 eventDatas, String partitionKey)
at EventHubsTesting.Program.Sender(CancellationTokenSource shutdownSource) in C:\EventHubsTesting\Program.cs:line 99
Я предполагаю, чтоесли я хочу использовать пользовательские типы, то мне нужно будет их сериализовать самостоятельно, прежде чем назначать их в качестве свойств приложения.