Error de serialización con objetos que aplican herencia.

Recientemente me he encontrado con un error al comunicar un objeto entre dos sistemas aplicando NServiceBus. Me ha resultado bastante curioso y creo que merece la pena una entrada para andarse con ojo con el tipo de asignación que hacemos entre objetos que aplican herencia entre sí.

A continuación te explico cuál es el problema. 

Suponte que tienes un objeto de tipo FirstObject con una propiedad FirstProperty, y tienes otro objeto SecondObject que hereda de FirstObject y tiene una propiedad SecondProperty.

Ahora suponte que haces una asignación como la siguiente:

En este caso fo pasará a ser de tipo SecondObject si lo envias en un evento para serializar, en cambio C# no nos permitirá acceder a fo.SecondObject. La variable check de ese pequeño código será true, y de hecho si en el cliente devolvemos el json de fo, tendrá la propiedad SecondObject.

Pensaba que era una situación que solo aplicaba a variables declaradas con “var”, pero esta situación también se produce con objetos de tipado fuerte como es el caso del código anterior.

En este caso una solución estaba generando un evento de NServiceBus con este tipo de objeto FirstObject (o eso pensaba), y la solución que se comportaba como suscriptora del evento sólo conocía la clase de FirstObject, pero no de SecondObject, por lo que al intentar serializar el mensaje recibido, daba un error de serialización por intentar serializar el tipo SecondObject sin conocerlo.

Este error puede dar más de un dolor de cabeza, por lo que cuidado al manipular la herencia y la asignación de un objeto hijo a una variable de su objeto padre.

Un saludo.

 

Deja un comentario