Это зависит от того, какой сериализатор вы используете на приемном конце.
По умолчанию Rebus будет использовать свой встроенный сериализатор JSON с довольно «полезной» настройкой, означающей, что включены все имена типов .NET. Это позволяет сериализовать сложные объекты, включая абстрактные / интерфейсные ссылки и т. Д.
Для этого сериализатора требуется несколько специальных заголовков, например, например. заголовок rbs2-content-type
, который используется для проверки того, что входящее сообщение представляется как JSON (скорее всего, с типом содержимого application/json; charset=utf-8
).
Если вы хотите включить десериализацию сообщений с других платформ, я предлагаю вам предоставить необходимые заголовки сообщений (которые - по крайней мере, со встроенным сериализатором Rebus - также включают имя типа .NET типа, который нужно попробовать десериализовать в).
Другим вариантом является установка настраиваемого сериализатора, что довольно легко сделать - вы можете начать с регистрации сериализатора следующим образом:
Configure.With(...)
.(...)
.Serialization(s => s.Register(c => new YourCrazySerializer()))
.Start();
, который вы затем реализуете примерно так:
public class YourCrazySerializer : ISerializer
{
public async Task<TransportMessage> Serialize(Message message)
{
var headers = message.Headers.Clone();
// turn into byte[] here
//
// possibly add headers
return new TransportMessage(headers, bytes);
}
public async Task<Message> Deserialize(TransportMessage transportMessage)
{
var headers = transportMessage.Headers.Clone();
// turn into object here
//
// possibly remove headers
return new Message(headers);
}
}
Как видите, довольно легко изменить Rebus для приема сообщений от других систем.