Szenario:
Ich schreibe gerade eine Schicht, um 3 ähnliche Webservices in eine brauchbare Klasse zu abstrahieren. Jeder Webservice stellt eine Reihe von Objekten zur Verfügung, die Gemeinsamkeiten haben. Ich habe eine Reihe von Zwischenobjekten erstellt, die diese Gemeinsamkeiten ausnutzen. In meiner Schicht muss ich jedoch zwischen den Webservice-Objekten und meinen Objekten konvertieren.
Ich habe Reflection verwendet, um den entsprechenden Typ zur Laufzeit zu erstellen, bevor ich den Webdienst wie folgt aufrufe:
public static object[] CreateProperties(Type type, IProperty[] properties)
{
//Empty so return null
if (properties==null || properties.Length == 0)
return null;
//Check the type is allowed
CheckPropertyTypes("CreateProperties(Type,IProperty[])",type);
//Convert the array of intermediary IProperty objects into
// the passed service type e.g. Service1.Property
object[] result = new object[properties.Length];
for (int i = 0; i < properties.Length; i++)
{
IProperty fromProp = properties[i];
object toProp = ReflectionUtility.CreateInstance(type, null);
ServiceUtils.CopyProperties(fromProp, toProp);
result[i] = toProp;
}
return result;
}
Hier ist mein Aufrufcode aus einer meiner Dienstimplementierungen:
Property[] props = (Property[])ObjectFactory.CreateProperties(typeof(Property), properties);
_service.SetProperties(folderItem.Path, props);
Jeder Dienst stellt also ein anderes "Property"-Objekt zur Verfügung, das ich hinter meiner eigenen Implementierung der IProperty-Schnittstelle verstecke.
Der Reflection-Code funktioniert in den Unit-Tests und erzeugt ein Array von Objekten, deren Elemente vom entsprechenden Typ sind. Aber der aufrufende Code schlägt fehl:
System.InvalidCastException: Unable to Objekt vom Typ 'System.Object[]' in Typ MyProject.Property[]
Irgendwelche Ideen?
Ich hatte den Eindruck, dass jeder Cast von Object funktioniert, solange das enthaltene Objekt konvertierbar ist?