Judging by the title of this question, what I want to do may not be possible so I will describe what I'm doing and you can feel free to let me know what I'm doing wrong and what would be a better way to accomplish my goal.
I have an XML file that describes 1) a custom object that is derived of a base type, and 2) the internal field names and associated values. These derived objects may have additional fields that the base class doesn't know about.
I extract the type of object as a string and I place all the object data into a dictionary where the key is the field name and the value is the field's value. I instantiate the object using the string name and the object's default constructor. I can sniff out all the object's properties into a PropertyInfo[]. Now I need to take all the values that are in string form and convert them into the correct data types so I can load them into the object's properties. (As I type this, it sounds like I'm taking a sort of save state and restoring it, but I've only heard of this sort of thing. If you would like to advise along these lines, then please keep in mind that I'm stuck reading data from an XML file and I can't change that.)
I can convert all the string values to a type given by a Type object and using a brute-force function that I made having the following definition:
public object convertMe(string v, Type t)
Since I don't know what Type I'm throwing at the function, I don't know what's coming back and I am unable to explicitly cast the object to the proper type for assigning to the aforementioned property. I have been attempting the following sort of casts to no avail:
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.
Ultimately, my goal is to create an instance of the object and load it with data from the XML file in such a way that the data types aren't hard-coded. The reason that I'm doing this in C# is because this used to be a Python program and I've been assigned to translate it into C# .NET 2.0. It's a learning experience to say the least. The reason that I created that "brute-force function" is because I was looking for a way around this casting problem, but no matter what I try I can't get it to work. I could likely do this on my own using pure force, but I figured that there must be an elegant solution that I'm missing.
Any help is greatly appreciated!