Невозможно привести объект типа «System.Object []» к «MyObject []», что дает?

Сценарий:

В настоящее время я пишу слой для абстрагирования 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 []

Есть идеи?

У меня сложилось впечатление, что любое приведение из объекта будет работать до тех пор, пока содержащийся объект является конвертируемым?

Ответы на вопрос(6)

Ваш ответ на вопрос