Сценарий:
В настоящее время я пишу слой для абстрактного 3 похожих веб-сервисов в один пригодный для использования класс. Каждый веб-сервис предоставляет набор объектов, которые обмениваются общими. Я создал набор промежуточных объектов, которые используют общность. Однако в моем слое мне нужно преобразовать объекты веб-службы и мои объекты.
Я использовал отражение для создания соответствующего типа во время выполнения до того, как я сделаю вызов веб-службы следующим образом:
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;
}
Здесь мой код вызова из одной из моих реализаций сервисов:
Property[] props = (Property[])ObjectFactory.CreateProperties(typeof(Property), properties);
_service.SetProperties(folderItem.Path, props);
Таким образом, каждая служба предоставляет другой объект "Свойство", который я скрываю за моей собственной реализацией моего интерфейса IProperty.
Код отражения работает в модульных тестах, создавая массив объектов, элементы которых имеют соответствующий тип. Но вызывающий код выходит из строя:
System.InvalidCastException: невозможно выполнить литой объект типа 'System.Object []' печатать "MyProject.Property []
Любые идеи?
У меня создалось впечатление, что любое нажатие из Object будет работать до тех пор, пока содержащийся объект может быть конвертируемым?