Может ли сообщение NServiceBus иметь свойство анонимного типа?
У меня есть 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'.
1 ответ
Я столкнулся с этой проблемой - проблема с json.net не совсем NServiceBus.
Json.Net требует возможности десериализации типа в строгий объект, чего он просто не может.
Есть несколько способов сделать это, вы можете изменить свой объект полезной нагрузки на интерфейс, который заставит NServiceBus использовать TypeNameHandling.None, что, в свою очередь, приведет к десериализации Json.Net, даже если он не знает тип.
Или вы можете написать свой собственный сериализатор, вероятно, в значительной степени основанный на их Json.Net, но с TypeNameHandling.None всегда включен.
Я не нашел причины, чтобы оставить TypeNameHandling, я думаю, что определенная команда приняла решение сделать это таким образом.