c# - Rebus RabbitMQ Object serialization -




how come when send message rabbitmq through rebus adding object data below, $type.

{"$type":"threesquared.vtgpam.objects.wagon, threesquared.vtgpam.objects","wagonid":"a98a06ab-33b9-4a11-9de2-df0b8787b713","wamosid":12324,"description":"test","yearbuilt":1982,"token":"3cce443c-249f-4fd2-9882-5830fb308b6b"} 

we have client using java rabbitmq library no rebus. approach believe send json without type declarations. therefore doesn't work when try , read in simple json object. how can make work doesn't define $type in message?

it's because rebus default uses newtonsoft json.net typenamehandling.all, means $type field included in every serialized object containing full .net type name of type serialized.

the benefit can serialize anything, though may contain instances referenced (possibly abstract) supertypes, , interfaces.

e.g. command message type

public class processfile {     public processfile(string filepath, ienumerable<ifileprocessingtask> tasks)     {         filepath = filepath;         tasks = tasks;     }      public string filepath { get; }      public ireadonlycollection<ifileprocessingtask> tasks { get; } } 

could contain arbitrary implementations of ifileprocessingtask, e.g.

public class gzipfileprocessingtask : ifileprocessingtask {     // ...     } 

as long recipient can find type looking via value of $type field.

if want process type of message on platform, can make ignore $type field of every object. may easy/hard/impossible, depending on how flexible json serializer is.

another option replace rebus' serializer own implementation doing this

configure.with(...)     .(...)     .serialization(s => s.usecustomjsonserialization())     .start(); 

where usecustomjsonserialization extension method implement this:

public static class rebusconfigex {     public static void usecustomjsonserialization(this standardconfigurer<iserializer> configurer)     {         configurer.register(c => new yourcustomjsonserializer());     } } 

and there left create class yourcustomjsonserializer implementation of iserializer.





wiki

Comments

Popular posts from this blog

Asterisk AGI Python Script to Dialplan does not work -

kotlin - Out-projected type in generic interface prohibits the use of metod with generic parameter -

python - Read npy file directly from S3 StreamingBody -