❔ Losing bytes when delivering dynamic object via RabbitMQ
Hey there got a bit of a complex problem.
Got this code:
Before when i tried to send the ExpandoObj itself all worked well.
Now Im sending a lift of objects the above methods produces using rabbitmq.
when i seralize i got a 1500 bytes messege size, when i recive the messege its only 120 bytes.
Any ideas what could be wrong?
Got this code:
public static object ToDynamicClass(this ExpandoObject expando)
{
AssemblyName assemblyName = new AssemblyName("DynamicAssembly");
AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("DynamicModule");
TypeBuilder typeBuilder = moduleBuilder.DefineType("DynamicType", TypeAttributes.Public);
foreach (var kvp in expando)
{
Type type = kvp.Value?.GetType() ?? typeof(object);
FieldBuilder field = typeBuilder.DefineField("_" + kvp.Key, type, FieldAttributes.Private);
PropertyBuilder property = typeBuilder.DefineProperty(kvp.Key, PropertyAttributes.HasDefault, type, null);
MethodAttributes getSetAttr = MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig;
MethodBuilder currGetPropMthdBldr = typeBuilder.DefineMethod("get_" + kvp.Key, getSetAttr, type, Type.EmptyTypes);
ILGenerator currGetIL = currGetPropMthdBldr.GetILGenerator();
currGetIL.Emit(OpCodes.Ldarg_0);
currGetIL.Emit(OpCodes.Ldfld, field);
currGetIL.Emit(OpCodes.Ret);
//Some code removed because of character limit
property.SetGetMethod(currGetPropMthdBldr);
property.SetSetMethod(currSetPropMthdBldr);
}
Type objType = typeBuilder.CreateType();
object obj = Activator.CreateInstance(objType);
foreach (var kvp in expando)
{
objType.GetProperty(kvp.Key)?.SetValue(obj, kvp.Value);
}
return obj;
}public static object ToDynamicClass(this ExpandoObject expando)
{
AssemblyName assemblyName = new AssemblyName("DynamicAssembly");
AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("DynamicModule");
TypeBuilder typeBuilder = moduleBuilder.DefineType("DynamicType", TypeAttributes.Public);
foreach (var kvp in expando)
{
Type type = kvp.Value?.GetType() ?? typeof(object);
FieldBuilder field = typeBuilder.DefineField("_" + kvp.Key, type, FieldAttributes.Private);
PropertyBuilder property = typeBuilder.DefineProperty(kvp.Key, PropertyAttributes.HasDefault, type, null);
MethodAttributes getSetAttr = MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig;
MethodBuilder currGetPropMthdBldr = typeBuilder.DefineMethod("get_" + kvp.Key, getSetAttr, type, Type.EmptyTypes);
ILGenerator currGetIL = currGetPropMthdBldr.GetILGenerator();
currGetIL.Emit(OpCodes.Ldarg_0);
currGetIL.Emit(OpCodes.Ldfld, field);
currGetIL.Emit(OpCodes.Ret);
//Some code removed because of character limit
property.SetGetMethod(currGetPropMthdBldr);
property.SetSetMethod(currSetPropMthdBldr);
}
Type objType = typeBuilder.CreateType();
object obj = Activator.CreateInstance(objType);
foreach (var kvp in expando)
{
objType.GetProperty(kvp.Key)?.SetValue(obj, kvp.Value);
}
return obj;
}Before when i tried to send the ExpandoObj itself all worked well.
Now Im sending a lift of objects the above methods produces using rabbitmq.
when i seralize i got a 1500 bytes messege size, when i recive the messege its only 120 bytes.
Any ideas what could be wrong?