Não foi possível converter o objeto do tipo 'System.Object []' para 'MyObject []', o que é fornecido?

Cenário:

Atualmente, estou escrevendo uma camada para abstrair 3 serviços da web semelhantes em uma classe utilizável. Cada serviço da web expõe um conjunto de objetos que compartilham pontos em comum. Eu criei um conjunto de objetos intermediários que exploram a semelhança. No entanto, na minha camada, preciso converter entre os objetos de serviço da web e meus objetos.

Usei a reflexão para criar o tipo apropriado em tempo de execução antes de fazer a chamada para o serviço da Web da seguinte maneira:

    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;
    }

Aqui está o meu código de chamada, de uma das minhas implementações de serviço:

Property[] props = (Property[])ObjectFactory.CreateProperties(typeof(Property), properties);
_service.SetProperties(folderItem.Path, props);

Portanto, cada serviço expõe um objeto "Propriedade" diferente que eu oculto por trás da minha própria implementação da minha interface IProperty.

O código de reflexão funciona em testes de unidade produzindo uma matriz de objetos cujos elementos são do tipo apropriado. Mas o código de chamada falha:

System.InvalidCastException: Não foi possível converter o objeto do tipo 'System.Object []' para o tipo 'MyProject.Property []

Alguma ideia?

Fiquei com a impressão de que qualquer conversão de Objeto funcionará enquanto o objeto contido for convertível?

questionAnswers(6)

yourAnswerToTheQuestion