2014-03-12 69 views
0

我有一个Payload类型的财产object
我填写有效载荷与匿名类型,并把它关闭,然后我得到这个丑陋的错误:NServiceBus消息是否可以具有匿名类型属性?

2014-03-12 15:50:25,649 [7] 
ERROR NServiceBus.Unicast.Transport.TransportReceiver [(null)] <(null)> - 
Failed to serialize message with ID: fc8d44c1-3750-4658-ba91-a2ec010507aa` 

System.Runtime.Serialization.SerializationException: 
An error occurred while attempting to extract logical messages from 
transport message NServiceBus.TransportMessage ---> 
Newtonsoft.Json.JsonSerializationException: 

Error resolving type specified in 
JSON '<>f__AnonymousType2`2[[System.String, mscorlib],[System.Int32,mscorlib]], MyProject'. 
Path '[0].Payload.$type', line 1, position 366. ---> Newtonsoft.Json.JsonSerializationException: Could not load assembly 'MyProject'. 

回答

2

我就遇到了这个问题 - 这个问题是json.net不是真的NServiceBus。
Json.Net需要能够将该类型反序列化为严格的对象,但它不能。

有几种方法可以做到这一点,你可以改变你的有效载荷对象到一个接口,这将迫使NServiceBus使用TypeNameHandling.None,这反过来会导致Json.Net反序列化,即使不知道类型。

或者您可以编写自己的序列化程序,可能严重依赖于它们的Json.Net一个,但始终使用TypeNameHandling.None。

我还没有找到保持TypeNameHandling的原因,我想也许特定的团队做出了这样做的决定。

相关问题