动态转换和消息类型

时间:2011-03-31 23:34:03

标签: c# .net reflection dynamic

我有这个对象,我正在通过TCP / IP序列化并发送到服务器,我需要反序列化它并在正确类型的消息中将其激活。我正在使用.net 4。

问题是该对象可能有几种不同的类型,并且信使需要知道它发送的内容的类型。我想要做的是发送一个字符串或类型对象,将指定主要对象的类型。现在我正在这样做,但它只适用于一种类型:

public void generic_Obj(Object obj)
{
     //Entity is a class that I define elsewhere
     //I'm using the Galasoft MVVM Light messenger
     Messenger.Default.Send<Entity>((Entity)obj, "token");
}

我想用反射做这样的事情:

public void gen_Obj(Object obj, Type genType, string token)
{
     //this doesn't work btw
     Messenger.Default.Send<genType>((genType)obj, token);
}

我已经尝试了所有不同的动态投射方法,例如使用反射,其中一些有效,但我真正的问题是找到一些东西放在那些&lt;&gt;之间。信使呼叫中的括号。

2 个答案:

答案 0 :(得分:1)

如果使用反射为MethodInfo方法生成Send,则可以使用MethodInfo.MakeGenericMethod创建具有genType定义的特定类型的方法。

完成后,MethodBase.Invoke可用于使用您的参数调用方法。

答案 1 :(得分:0)

您也可以使用dlr而不是反射在.net 4中执行此操作。开源框架Impromptu-interface有一个帮助方法,使其成为easy

public void gen_Obj(Object obj, Type genType, string token)
{
     Impromptu.InvokeMemberAction(Messenger.Default,"Send".WithGenericArgs(genType),obj,token)
}