I want to use Reflection to convert a KeyValuePair to different Properties of an object. These Properties can be simple Types or Complex types. If they are properties of the "BaseClass" type I want to assign the Id and Name:
My Classes:
public class MyBaseClass {
public int Id { get;set;}
public string Name {get; set;}
}
public class Person:MyBaseClass {
public int Age {get;set;}
}
public class Item:MyBaseClass {
public decimal Price {get;set;}
}
public class TargetClass {
public Person Chief {get;set;}
public Item Product {get;set;}
}
Now I want to use Reflection to assign the values:
foreach (var field in Fields) {
var target=targetType.GetProperty(field.Key);
if (field.Value.indexOf("|")>0) {
int id=int.Parse(field.Value.Split('|')[0]);
string name=field.Value.Split('|')[1];
var baseObj = new MyBaseClass { Id = id, Name=name };
target.SetValue(dest, baseObj);
} else {
target.SetValue(dest,field.Value);
}
}
So if the field contains a "|" I want to split that value in an Id
and a Title
and Assign them to the target type.
Fields
is a Dictionary of targetType
is typeof(TargetClass)
and dest
is an object of TargetClass
.
So in my example, target
could be the Property Chief
and field["Chief"]
could be "23|John Doe"
But when I try to assign an object of MyBaseClass
to the Property Chief
(or Product) I receive an error that the conversion from MyBaseClass to Chief failed. But to use this in a generic fashion I do want to use this method on any Object that is derived from MyBaseClass
.
Aucun commentaire:
Enregistrer un commentaire