Rabbitmq MassTransit中的头序列化不正确

Rabbitmq MassTransit中的头序列化不正确,rabbitmq,masstransit,Rabbitmq,Masstransit,从[5.1.5]MassTransit更新到[5.5.4]后,我对标题序列化有问题,标题中的数字变成字符串: 我添加如下标题: _serviceBus.Publish( new TestMessage { TestLong = 2, TestString = "ol" }, ctx => { ctx.Headers.Set("SuperMarkerHeader", 1);

从[5.1.5]MassTransit更新到[5.5.4]后,我对标题序列化有问题,标题中的数字变成字符串: 我添加如下标题:

_serviceBus.Publish(
            new TestMessage { TestLong = 2, TestString = "ol" },
            ctx =>
            {
                ctx.Headers.Set("SuperMarkerHeader", 1);
            }).ConfigureAwait(false);
[5.5.4]我得到:

[5.1.5]代替:

有人知道解决方案或相关信息吗

UPD:[5.2.0]也有问题

UPD2:发现犯下此问题的人:

这就是开始使用“SetTextHeader”函数而不是设置所有头的地方。

因此,transofrm代码来自:

KeyValuePair<string, object>[] headers = context.Headers.GetAll()
    .Where(x => x.Value != null && (x.Value is string || x.Value.GetType().GetTypeInfo().IsValueType))
    .ToArray();

foreach (KeyValuePair<string, object> header in headers)
{
    if (properties.Headers.ContainsKey(header.Key))
        continue;

    properties.SetHeader(header.Key, header.Value);
}

但我不明白——所有的标题是如何变成文本的?因为我被(字符串、对象)重载设置为header。

这是在5.20中更改的,不是有意的。RabbitMQ wire格式化程序支持一些已知类型,我将在下一版本中恢复对这些类型的支持。我还添加了将DateTime/DateTimeOffset转换为AMQP时间戳的支持(如果可能的话),否则,它将被格式化为字符串。

谢谢!但是为什么在[5.5.4]中不存在字符串头呢?无法理解这部分。。。例如:我用header.Set(string,long)添加header。有两个检查-is string和isformattable,都是false。所以长标题不能添加到标题属性。。。
    foreach (var header in headers.GetAll())
    {
        if (header.Value == null)
            continue;

        if (dictionary.ContainsKey(header.Key))
            continue;

        if (header.Value is string stringValue)
        {
            dictionary[header.Key] = converter(header.Key, stringValue);
        }
        else if (header.Value is IFormattable formatValue && formatValue.GetType().IsValueType)
        {
            dictionary.Add(header.Key, converter(header.Key, formatValue.ToString()));
        }
    }