根据这个问题的标题,我想做的可能不可能,所以我会描述一下我的做法,你可以随意告诉我我做错了什么,以及更好的实现目标的方法。
我有一个XML文件,描述了1)一个自定义对象,它是从基础类型派生出来的,以及2)内部字段名称和关联值。这些派生对象可能有额外的字段,基类不知道。
我将对象类型提取为字符串,并将所有对象数据放入字典中,其中键是字段名,值是字段的值。我使用字符串名称和对象的默认构造函数实例化对象。我可以将所有对象的属性嗅探到< strong> PropertyInfo [] 中。现在我需要将所有以字符串形式存在的值转换为正确的数据类型,以便我可以将它们加载到对象的属性中。(当我打字时,这听起来像是我正在保存状态并恢复它,但我只听说过这种事情。如果您想沿着这些线路提供建议,请记住我被困在从XML文件读取数据的位置上,我不能改变它。)
我可以将所有字符串值转换为由< strong> Type 对象给出的类型,并使用我制作的暴力函数进行转换,其定义如下:
最终,我的目标是创建一个对象实例,并以不硬编码的方式从XML文件中加载数据。我之所以使用C#,是因为这曾经是一个Python程序,而我被指派将其翻译成C#.NET 2.0。可以说这是一次学习经历。我创建“蛮力函数”的原因是因为我正在寻找一种解决强制转换问题的方法,但无论我尝试什么,都无法让它正常工作。我可能可以用纯粹的力量自己完成,但我认为一定有一种优雅的解决方案我还没有发现。
我有一个XML文件,描述了1)一个自定义对象,它是从基础类型派生出来的,以及2)内部字段名称和关联值。这些派生对象可能有额外的字段,基类不知道。
我将对象类型提取为字符串,并将所有对象数据放入字典中,其中键是字段名,值是字段的值。我使用字符串名称和对象的默认构造函数实例化对象。我可以将所有对象的属性嗅探到< strong> PropertyInfo [] 中。现在我需要将所有以字符串形式存在的值转换为正确的数据类型,以便我可以将它们加载到对象的属性中。(当我打字时,这听起来像是我正在保存状态并恢复它,但我只听说过这种事情。如果您想沿着这些线路提供建议,请记住我被困在从XML文件读取数据的位置上,我不能改变它。)
我可以将所有字符串值转换为由< strong> Type 对象给出的类型,并使用我制作的暴力函数进行转换,其定义如下:
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.
最终,我的目标是创建一个对象实例,并以不硬编码的方式从XML文件中加载数据。我之所以使用C#,是因为这曾经是一个Python程序,而我被指派将其翻译成C#.NET 2.0。可以说这是一次学习经历。我创建“蛮力函数”的原因是因为我正在寻找一种解决强制转换问题的方法,但无论我尝试什么,都无法让它正常工作。我可能可以用纯粹的力量自己完成,但我认为一定有一种优雅的解决方案我还没有发现。
非常感谢您的任何帮助!