2

这是测试:

        var bus = ServiceBusFactory.New(c =>
                                        {
                                            c.DisablePerformanceCounters();
                                            c.UseRabbitMq();
                                            c.ReceiveFrom("rabbitmq://localhost/qqq");
                                        });
        bus.SubscribeHandler((Order o) => Console.WriteLine(o.Date));
        bus.Publish(new Order
                    {
                        Date = "1994-11-05T13:15:30Z"
                    });

这是我的 Order 类(Date 属性是字符串类型!):

public class Order
{
    public string Date { get; set; }
}

我希望显示 Date 的内容,但这是实际输出:

11/05/1994 13:15:30

那么,MassTransit 是否只是尝试将他收到的每个字符串转换为 DateTime,然后按照它想要的方式对其进行格式化,还是什么?

UPD:使用 XmlSerializer 而不是 Json 并没有解决问题。这是我在 RabbitMQ 中看到的部分消息:

<date>1994-11-05T13:15:30Z</date>

我在应用程序中收到的消息再次以相同的方式更改:

11/05/1994 13:15:30

UPD2:我已经测试了序列化程序(Json.NET):

var panda = new Panda
                    {
                        Birthday = "1994-11-05T13:15:30Z"
                    };
Console.Out.WriteLine(JsonConvert.DeserializeObject<Panda>(JsonConvert.SerializeObject(panda)).Birthday);

输出是字符串“原样”,所以看来问题不在于序列化程序。

4

1 回答 1

2

为它创建了一个 MassTransit 问题:https ://github.com/MassTransit/MassTransit/issues/197 。

JSON.NET (5.0.6) 确实无法正确翻译。

[TestFixture]
public class IsoDateSerializationTest
{
    [Test]
    public void Test()
    {
        JToken jtoken = JObject.Parse(@"{ IsoDate: ""1994-11-05T13:15:30Z"" }");
        Type deserializeType = typeof (MessageWithIsoDate);
        JsonSerializer serializer = new JsonSerializer();
        object obj;

        using (var jsonReader = new JTokenReader(jtoken))
        {
            obj = serializer.Deserialize(jsonReader, deserializeType);
        }

        MessageWithIsoDate msg = obj as MessageWithIsoDate;
        Assert.That(msg.IsoDate, Is.EqualTo("1994-11-05T13:15:30Z"));
    }
}

public class MessageWithIsoDate
{
    public String IsoDate { get; set; }
}

注意:XML 也会失败,因为 MT 也只使用 JSON.NET 来反序列化 XML。显然比大多数 XML 序列化器快很多。使用 BSON、Binary 或 VersionOneXml 都可以正常运行。

于 2013-08-21T13:02:40.087 回答