C# 将变量作为类型传递而不使用反射:';myvar';是一个变量,但与类型一样使用

C# 将变量作为类型传递而不使用反射:';myvar';是一个变量,但与类型一样使用,c#,types,casting,C#,Types,Casting,我有一个简单的方法,可以将xml字符串反序列化为指定的类型 public static class TextUtility { public static T Deserialize<T>(string xml) { ... } } 我试着这样做: object messageObject = TextUtility.DeserializeMessage<object>(message.MessageBodyAsXML); 这确

我有一个简单的方法,可以将xml字符串反序列化为指定的类型

public static class TextUtility
{
    public static T Deserialize<T>(string xml)
    {
        ...
    }
}
我试着这样做:

object messageObject = TextUtility.DeserializeMessage<object>(message.MessageBodyAsXML);
这确实用正确的类型填充了“type”。但显然我不能这么做:

type messageObject = TextUtility.DeserializeMessage<type>(message.MessageBodyAsXML);
type messageObject=TextUtility.DeserializeMessage(message.MessageBodyAsXML);

对于每种类型,我都在努力避免长时间的if/then。思想开放。谢谢

显然,对于编译时不知道类型的动态目的,您需要提供一个超负荷的
反序列化方法:

public static object Deserialize(Type targetType, string xml)
{
    ...
}

有很多方法可以从反射(基于类型)代码转换为静态(基于泛型)代码,但这并不值得;这里最明显的解决方案是:此时不要使用泛型。你需要吗?避免泛型正是我想知道的!好的,这是有道理的。如果需要帮助,我可能会开始一个关于如何编写重载方法的新线程。谢谢当然,实现将取决于您使用的特定XML序列化程序,但如果您使用的是标准的
XmlSerializer
,则可以在实例化时指定目标类型:
var serializer=new XmlSerializer(targetType)
,将类型作为普通参数传递不是有点违背类型参数的目的吗?但这可能是微软的错,而不是你的错。
Type type = processor.GetType();
type messageObject = TextUtility.DeserializeMessage<type>(message.MessageBodyAsXML);
public static object Deserialize(Type targetType, string xml)
{
    ...
}