Pregunta en el título ... En resumen: tengo un servicio WCF que expone operaciones que devuelven clases de entidad. Las clases del lado del cliente heredan de una clase base abstracta en lugar del System.Object predeterminado. La clase base abstracta tiene un constructor predeterminado definido. Al llamar a uno de los métodos de servicio, esperaría que se llamara al constructor cuando el serializador de contratos de datos materializara los objetos devueltos. Sin embargo, el constructor no es llamado. Si, por otro lado, creo una instancia de la clase de entidad yo mismo, entonces se llama al constructor de la clase abstracta.¿Por qué no se llama al constructor de mi clase base abstracta cuando el deserializador de WCF inicializa un objeto?
¿Por qué, oh por qué, y hay una solución? ¿O me perdí algo? ¿Hay otra firma de constructor que el serializador de datacontract llama cuando materializa objetos? Si no es así, ¿cómo puede el serializador de contratos de datos materializar objetos sin llamar a los constructores de la misma manera que una llamada "nueva SomeClass()"? ¿O tomé demasiado café hoy (solo tuve 2 o 3 tazas hasta ahora)?
Gracias por la respuesta rápida. Guau. Eso me sorprende Pensé que la inicialización de todos los objetos daría como resultado el llamado de constructores. Oh, bueno, aprendí algo nuevo hoy ... :) – KristoferA
De hecho, es bastante sorprendente. ¡Tuve que cavar en un reflector la primera vez que lo vi! –
Una pregunta de seguimiento [por curiosidad] sería: _ ¿por qué lo hicieron de esa manera? ¿Actuación? Para meterse con nuestras cabezas? ¿O alguna otra razón mejor? :) – KristoferA