C# .NET从字符串获取类名

C# .NET从字符串获取类名,c#,.net,serialization,reflection,types,C#,.net,Serialization,Reflection,Types,我需要使用这种方法: public T DeserializeFromXmlString<T>(string xmlString) { var serializer = new XmlSerializer(typeof(T)); using (TextReader reader = new StringReader(xmlString)) { return (T)serializer.Deserialize(reader); } }

我需要使用这种方法:

public T DeserializeFromXmlString<T>(string xmlString)
{
    var serializer = new XmlSerializer(typeof(T));
    using (TextReader reader = new StringReader(xmlString))
    {
        return (T)serializer.Deserialize(reader);
    }
}
public T反序列化fromXmlString(string-xmlString)
{
var serializer=newxmlserializer(typeof(T));
使用(TextReader=new StringReader(xmlString))
{
返回(T)序列化程序。反序列化(读取器);
}
}
要使用它,我需要知道泛型类型T。假设我有一个类“Apple”。我将这样使用它:

var myapple= DeserializeFromXmlString<Apple>(someXmlString);
var myapple=DeserializeFromXmlString(someXmlString);

但是,考虑到我有字符串“Apple”,我需要能够删除此
并用其他内容替换它。
目标是转换字符串,以便能够在此方法中将其用作泛型类型T。

重新设计API以支持非泛型情况:

public object DeserializeFromXmlString(Type targetType, string xmlString)
{
    var serializer = new XmlSerializer(targetType);
    using (TextReader reader = new StringReader(xmlString))
    {
        return serializer.Deserialize(reader);
    }
}

public T DeserializeFromXmlString<T>(string xmlString)
{
    return (T)DeserializeFromXmlString(typeof(T), xmlString);
}

重新设计API以支持非通用情况:

public object DeserializeFromXmlString(Type targetType, string xmlString)
{
    var serializer = new XmlSerializer(targetType);
    using (TextReader reader = new StringReader(xmlString))
    {
        return serializer.Deserialize(reader);
    }
}

public T DeserializeFromXmlString<T>(string xmlString)
{
    return (T)DeserializeFromXmlString(typeof(T), xmlString);
}

然而,如果我们在编译时不知道OP想要的类型,那么这个的可能副本不会返回一个强类型的
t
实例。@HimBromBeere:绝对如此。但是,如果我们在编译时知道类型,我们就得到了一个类型而不是类型名。在我看来,在使用类型名的上下文中谈论类型安全是很奇怪的好的,谢谢你的帮助!但是,如果我现在想获取xml元素的值,我现在能做什么呢?以前,我可以只做我的苹果example@KingOfBabu当前位置看起来您正在讨论两个相互排斥的用例。要能够编写
myApple.Color
,您需要了解编译类型下的
Apple
类型;如果您了解苹果公司的
Apple
,那么您可以使用泛型方法,而不需要类型名称。假设
Apple
在编译时是未知的,您需要非泛型方法,但在这种情况下无法编写
myApple.Color
。您的选项将是:a)
动态
;b) 反思;c) 强制转换到某个静态已知的基本类型(例如,
Fruit
)。好的,现在更好了!我将使用反射,谢谢:)但是,如果我们在编译时不知道OP想要的类型,这将不会返回
t的强类型实例。@HimBromBeere:绝对如此。但是,如果我们在编译时知道类型,我们就得到了一个类型而不是类型名。在我看来,在使用类型名的上下文中谈论类型安全是很奇怪的好的,谢谢你的帮助!但是,如果我现在想获取xml元素的值,我现在能做什么呢?以前,我可以只做我的苹果example@KingOfBabu当前位置看起来您正在讨论两个相互排斥的用例。要能够编写
myApple.Color
,您需要了解编译类型下的
Apple
类型;如果您了解苹果公司的
Apple
,那么您可以使用泛型方法,而不需要类型名称。假设
Apple
在编译时是未知的,您需要非泛型方法,但在这种情况下无法编写
myApple.Color
。您的选项将是:a)
动态
;b) 反思;c) 强制转换到某个静态已知的基本类型(例如,
Fruit
)。好的,现在更好了!我将使用反射,谢谢:)