0

我有一个Payload类型的属性object
我用匿名类型填充 Payload,然后将其发送出去,然后我得到了这个丑陋的错误:

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'.
4

1 回答 1

2

我遇到了这个问题 - 问题在于 json.net 而不是真正的 NServiceBus。
Json.Net 要求能够将类型反序列化为严格的对象,而这是它做不到的。

有几种方法可以做到这一点,您可以将有效负载对象更改为一个接口,该接口将强制 NServiceBus 使用 TypeNameHandling.None 这反过来会导致 Json.Net 反序列化,即使不知道类型。

或者您可以编写自己的序列化程序,可能很大程度上基于他们的 Json.Net 序列化程序,但 TypeNameHandling.None 始终打开。

我还没有找到继续使用 TypeNameHandling 的理由,我想也许是特定团队决定这样做。

于 2014-08-14T22:13:29.840 回答