This sample uses the Newtonsoft serializer NServiceBus.Newtonsoft.Json and configures it to use BSON.
Configuring to use NServiceBus.Newtonsoft.Json
var endpointConfiguration = new EndpointConfiguration("Samples.Serialization.ExternalBson");
var serialization = endpointConfiguration.UseSerialization<NewtonsoftJsonSerializer>();
serialization.ContentTypeKey("application/bson");
serialization.ReaderCreator(stream => new BsonDataReader(stream));
serialization.WriterCreator(stream => new BsonDataWriter(stream));
Diagnostic mutator
A helper that will write out the contents of any incoming message.
public class MessageBodyWriter :
    IMutateIncomingTransportMessages
{
    readonly static ILog log = LogManager.GetLogger<IMutateIncomingTransportMessages>();
    public Task MutateIncoming(MutateIncomingTransportMessageContext context)
    {
        var bodyAsString = Encoding.UTF8
            .GetString(context.Body.ToArray());
        log.Info("Serialized Message Body:");
        log.Info(bodyAsString);
        return Task.CompletedTask;
    }
}
Register the mutator.
endpointConfiguration.RegisterMessageMutator(new MessageBodyWriter());
Sending a message
var message = new CreateOrder
{
    OrderId = 9,
    Date = DateTime.Now,
    CustomerId = 12,
    OrderItems = new List<OrderItem>
            {
                new OrderItem
                {
                    ItemId = 6,
                    Quantity = 2
                },
                new OrderItem
                {
                    ItemId = 5,
                    Quantity = 4
                },
            }
};
await endpointInstance.SendLocal(message);