嗯,我不确定我是否正确地提出了这个问题,或者我是否正确地提出这个问题,但是这里有。
我有一个存储在数据库中的序列化对象(用XML格式),以及一个表示类型的字符串/ varchar。
现在我这样做:(因为我有不同类型的数量有限)
Dim deserializer as XmlSerializer
If datatable("type") = "widget1" then
deserializer = new XmlSerializer(GetType(Widget1))
elseif datatable("type") = "widget2" then
deserializer = new XmlSerializer(GetType(Widget2))
...
我想做像
这样的事情Dim deserializer as XmlSerializer
deserializer = new XmlSerializer(MagicallyConvertToSystemDotType(datatable("type"))
我在这里咆哮错误的树吗?
答案 0 :(得分:2)
您是否尝试过使用Type.GetType?这将获取一个字符串参数并返回该名称的类型。您可能需要向其提供有关简单名称“小部件”的更多信息,以及更多有关全名的信息。但是从你的示例中看,它们应该都具有相同的命名空间,因此不应该是一个很大的障碍。
答案 1 :(得分:0)
另一个选项,如果你想要一个真正的关键字Type,而不是一个变量类型正在使用类似的东西(对不起,我正在使用C#,我太累了,不能进行VB转换):
method in XmlSerializer like Deserialize(typestring, object);
method in XmlSerializer like Deserialize<T>(object);
public void Deserialize(string typestring, object obj)
{
MethodInfo deserialize = typeof(XmlSerializer)
.GetMethod("Deserialize", BindingFlags.Instance | BindingFlags.Public)
.MakeGenericMethod(new Type[] { Type.GetType(typestring) });
deserialize.Invoke(this, new[] { obj });
}
答案 2 :(得分:0)
具体来说,我认为你在这里寻找这个代码(注意:我在VB.Net中工作不多,所以我希望语法上的所有内容都正确):
VB.Net:
// Get the type of object being deserialized.
Dim t as Type = Type.GetType(typeNameString);
// Make a new instance of the object.
Dim o as Object = Activator.CreateInstance(t);
C#:
// Get the type of object being deserialized.
Type t = Type.GetType(typeNameString);
// Make a new instance of the object.
object o = Activator.CreateInstance(t);
编辑(2009年10月26日,格林威治标准时间-0600 15:10):Type.GetType(字符串typeNameString)方法并不总是将类型识别为完全限定名称。确保在参数字符串中包含尽可能多的信息符合您的最佳利益,如下所示:
VB.Net/C#:
typeNameString = objectSerialized.GetType().Namespace + ", " + objectSerialized.GetType().Name + ", " + objectSerialized.GetType().Assembly.FullName
不太具体,我遇到了同样的问题,经过大量的研究,我终于找到了一个很好的解决方案来动态处理所有 大多数。我已经将整个源代码发布到一个类,该类能够使用Reflection对所有类型的对象 不包含泛型或数组进行序列化和反序列化。随意拿它,并将其作为自己的。 如果有人决定添加对泛型和数组的处理,请向我发送更新的副本,以便我可以将其发布回我的博客(并且你会获得荣誉奖; - )......)。它会递归地序列化所有内容,并且还有一些特殊的编码用于枚举。
看看是否涵盖了您正在寻找的所有内容:
http://maxaffinity.blogspot.com/2009/10/serialize-objects-manually.html
〜的md5sum〜
编辑(2009年10月27日14:38 GMT-0600):纠正了我博客上有关课程的一些错误信息。