根据这个问题的标题来判断,我想要做的事情可能不可能,所以我会描述我在做什么,你可以随时让我知道我在做什么,做错了什么是更好的方式来实现我的目标。C#类型在运行时使用反射铸造
我有一个XML文件,它描述了1)派生自基本类型的自定义对象,以及2)内部字段名称和关联值。这些派生对象可能具有基类不知道的附加字段。
我将对象的类型提取为字符串,并将所有对象数据放入字典中,其中键是字段名称,值是字段的值。我使用字符串名称和对象的默认构造函数实例化对象。我可以将所有对象的属性嗅探到PropertyInfo []。现在我需要获取所有字符串形式的值,并将它们转换为正确的数据类型,以便将它们加载到对象的属性中。 (当我输入这个内容时,听起来我正在采取某种保存状态并恢复它,但我只听说过这类事情。如果您想要按照这些方式提出建议,请记住我卡住从XML文件读取数据,我不能改变这一点。)
我可以将所有的字符串值转换为由类型对象给出的类型,并使用我制作的蛮力函数具有以下定义:
public object convertMe(string v, Type t)
因为我不知道是什么类型我在函数扔,我不知道发生了什么回来,我无法明确地投出对象分配给上述属性的正确类型。我一直在尝试下面这种类型转换无济于事:
string objectType = /*read type string from XML*/;
... // Wherein I instantiate an object "theObject" and get PropertyInfo[] from it.
... // I also make sure that I'm trying to assign the correct data to
... // the correct property.
Type t = currentProperty.PropertyType;
object o = convertMe(value, Type.GetType(qtype));
currentProperty.SetValue(theObject, (t)o, null); // Doesn't work
currentProperty.SetValue(theObject, (t)Convert.ChangeType(o, t), null); // Doesn't work. Apparently (t) is bad syntax.
最终,我的目标是创建对象的实例,并以这样的方式,数据类型AREN从XML文件中的数据加载没有硬编码。我在C#中这样做的原因是因为这曾经是一个Python程序,我已经被分配到C#.NET 2.0中。至少可以说这是一种学习体验。我创建这个“强力功能”的原因是因为我正在寻找解决这个投射问题的方法,但无论我尝试什么,我都无法使其工作。我可能会用纯粹的力量自己做这件事,但我认为必须有一个我错过的优雅解决方案。
任何帮助,非常感谢!
好吧frell我死了。我会把这个代码盲化。虽然MSDN文档说它使用了一个对象,但每个显示其使用的示例都使用了正确的值类型,所以我从来没有建立过这种连接。非常感谢! – Sanjamal 2009-12-01 18:14:47