Clone DTO extensor


DECEMBER 2016 - JANUARY 2017

Clone DTO extensor

DECEMBER 2016 - JANUARY 2017

Muchas veces queremos clonar instancias de objetos con información, ya sean ViewModels o cualquier tipo de DTO. El objetivo de clonar una instancia de objeto es poder trabajar sobre él sin que se modifique el original. A menudo una cosa a priori tan sencilla puede ser un quebradero de cabeza. Con esta herramienta tan sencilla se pueden clonar o convertir instancias de objetos de forma rápida y eficaz

Serialización y deserialización de DTO´s utilizando la librería NewtonSoft

Con algo tan básico como la serialización y la deserialización podemos clonar o convertir objetos, en este ejemplo se utiliza para ello la librería NewtonSoft.

En este artículo se explica el código de una simple clase extensora y ejemplos de uso para aplicar lo anterior

Es posible descargar el código fuente de GitHub, o hacer uso de la librería directamente usando NuGet

Enlace al proyecto en GitHub

Documentación de Json Newtonsoft

Enlace al paquete en NuGet

Para instalar Clone DTO Extender, busca "CloneDTOExtender" en el administrador de paquetes de NuGet o ejecuta el comando "Install-Package CloneDTOExtender" en la consola de administración de paquetes.

Clonando DTO´s

Esta clase permite clonar DTO´s con funciones extensoras sin necesidad de usar Automapper o de hacer una copia parámetro a parámetro, obviamente no se copiarán atributos privados, pero sí contenidos de listas, diccionarios o estructuras internas.

Convirtiendo DTO´s

La conversión entre diferentes tipos de DTO´s tiene una serie de peculiaridades y puede presentar problemas.

Si un DTO destino tiene campos que no tiene el DTO de origen, éstos no se rellenarán, por otra parte, si el de origen tiene campos que no tiene el de destino, éstos se perderán en la copia. Estos problemas son frecuentes a la hora de convertir entre clases que extienden de otras.

Por último, si los DTO´s contienen campos con el mismo nombre pero diferente formato (por ejemplo un double y un int), la conversión dará problemas para algunos casos (por ejemplo convirtiendo un double a un entero).

Ejemplos

En el enlace a GitHub del proyecto, se puede descargar un proyecto que clona y convierte estructuras de ejemplo.

Una vez importado el código anterior, al ser métodos extensores, se pueden utilizar para cualquier DTO.

Se muestran a continuación ejemplos de código de clonado y conversión de los DTO´s utilizados en el proyecto.

Código de DTO´s de ejemplo
Código de ejemplo de clonado
Código de ejemplo de conversión
Resultados esperados