【发布时间】:2011-01-22 00:49:49
【问题描述】:
从这个问题的标题来看,我想做的事情可能是不可能的,所以我会描述我在做什么,你可以随时让我知道我做错了什么以及什么会更好实现我的目标的方法。
我有一个 XML 文件,它描述了 1) 派生自基本类型的自定义对象,以及 2) 内部字段名称和关联值。这些派生对象可能具有基类不知道的附加字段。
我将对象的类型提取为字符串,并将所有对象数据放入字典中,其中键是字段名称,值是字段的值。我使用字符串名称和对象的默认构造函数来实例化对象。我可以将对象的所有属性嗅探到 PropertyInfo[] 中。现在我需要获取所有字符串形式的值并将它们转换为正确的数据类型,以便我可以将它们加载到对象的属性中。 (当我输入这个时,听起来我正在采取一种保存状态并恢复它,但我只听说过这种事情。如果您想按照这些方式提出建议,请记住我无法从 XML 文件中读取数据,无法更改。)
我可以将所有字符串值转换为由 Type 对象给出的类型,并使用我制作的具有以下定义的蛮力函数:
public object convertMe(string v, Type t)
由于我不知道我在函数中抛出什么 Type,所以我不知道会返回什么,并且我无法显式转换 object分配给上述属性的正确类型。我一直在尝试以下类型的演员,但无济于事:
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.
最终,我的目标是创建对象的一个实例,并使用 XML 文件中的数据加载它,使数据类型不会被硬编码。我在 C# 中执行此操作的原因是因为它曾经是一个 Python 程序,我被分配将其翻译成 C# .NET 2.0。至少可以说这是一次学习经历。我创建“蛮力函数”的原因是因为我一直在寻找解决这个铸造问题的方法,但无论我尝试什么,我都无法让它发挥作用。我可能会使用纯武力自己完成此操作,但我认为一定有一个我缺少的优雅解决方案。
非常感谢任何帮助!
【问题讨论】: