so, have object class inherited class. however, whenever try set child class invokemember method using reflection, says method/member doesn't exist. missing something?
namespace group { public class person { public guid personid { get; set; } public string firstname { get; set; } public void load(namevaluecollection fields) { type classtype = this.gettype(); propertyinfo[] properties = classtype.getproperties(); foreach(propertyinfo property in properties) { for(int x = 0; x < fields.count; x++) { if (fields.keys[x] != property.name) continue; classtype.invokemember(property.name, bindingflags.instance | bindingflags.setproperty, type.defaultbinder, this, new object[] { fields[x] }); break; } } } } namespace group { public class vipperson : person { } } the following code calls above class:
function somemethod() { namevaluecollection collection = new namevaluecollection(); collection.add("firstname", "mark"); vipperson person = new vipperson(); person.load(collection); } any why invokemember throwing error says property doesn't exist?
here's how using setvalue reading value out of xml file.
//--- object properties propertydescriptorcollection props = typedescriptor.getproperties(targetcomponent); foreach (var xmlproperty in propertiesfromxml) { var propertyname = xmlproperty.name.tostring(); var propertydescriptor = props[propertyname]; if (propertydescriptor == null) { // property not exist, create 1 anyways? } else { propertydescriptor.setvalue(targetcomponent, convert.changetype(xmlproperty.value, propertydescriptor.propertytype)); } }
Comments
Post a Comment