我想将字符串转换为C#类型。这里的用例是我将序列化数据与类型一起存储在缓存中,然后将其转发回来。 我有一个名为DataEntities.Show的自定义类(其中DataEntities是命名空间)。 如果我存储该类'type“DataEntities.ShowEntity”然后尝试反序列化它,一切都很好,花花公子。
当我在缓存中存储List类型的对象时,会出现故障。 其结果类型为“System.Collections.Generic.List`1 [DataEntities.ShowEntity]”,因此下面的查找失败,因为程序集仅包含DataEntities.ShowEntity,并且找不到结果类型。结果我得到一个null。
我可以想到一个丑陋的解决方案,我为“List”或“Enumeration”的前缀解析字符串类型,但必须有一种更优雅的方式。有什么建议吗?
private static Type GetGlobalType(string s)
{
Type t = null;
Assembly[] av = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly a in av)
{
Type[] types = a.GetTypes();
t = Type.GetType(s + "," + a.GetName());
if (t == null)
{
t = Type.GetType(s);
}
if (t != null)
break;
}
return t;
}
答案 0 :(得分:0)
您自己处理演员表的任何特殊原因。您可以使用隐式声明来使用简单的XML序列化来处理它。
当反序列化类时,它将在运行时自动设置正确的类型,无需进行强制转换。
var dataIn = new List<DataEntities.ShowEntity>();
Console.WriteLine("Type before serialization: " + dataIn.GetType());
var xs = new XmlSerializer(dataIn.GetType());
var xmlWriter = XmlWriter.Create(@"C:\test.xml");
xs.Serialize(xmlWriter, dataIn);
xmlWriter.Close();
var xmlReader = XmlReader.Create(@"C:\test.xml");
var dataOut = xs.Deserialize(xmlReader);
xmlReader.Close();
Console.WriteLine("Type after deserialization: " + dataOut.GetType());