Skip to main content

Conversión de tipos

Crono incluye un framework de conversión de tipos flexible que permite convertir en tiempo de ejecución cadenas, números, colecciones e incluso objetos complejos. El sistema se construye alrededor de implementaciones de ITipoConvertidor (Crono.ComponenteModelo), descubiertas a través de una fábrica.

Convertidores integrados​

TipoConvertidorFabrica mantiene una lista de proveedores que suministran convertidores para un tipo destino. Por defecto incluye proveedores para convertidores basados en atributos, primitivos simples, diccionarios y colecciones (TipoSimpleConvertidorProveedor, TipoColeccionConvertidorProveedor, TipoDiccionarioConvertidorProveedor, TipoAtributoConvertidorProveedor). Una solicitud de convertidor recorre estos proveedores y, si ninguno coincide, recae en un convertidor predeterminado.

Existen convertidores para los tipos más habituales: booleanos, DateTime, TimeSpan, enteros, nullables, enumerables, diccionarios, valores JSON, StringValues, etc.

Uso​

La forma más cómoda es la extensión Convertir<T>(), que se apoya en la fábrica para realizar la conversión (respetando la cultura indicada):

// Cadena separada por comas a lista de enteros
var ids = "1,2,3".Convertir<IList<int>>();

// Diccionario a un objeto (POCO con constructor sin parámetros)
var diccionario = new Dictionary<string, object?> { ["Nombre"] = "Demo", ["Edad"] = 42 };
var persona = diccionario.Convertir<Persona>();

Este sistema es la base de otras utilidades del framework: por ejemplo, las configuraciones y los atributos genéricos guardan sus valores como texto y los convierten automáticamente al tipo de la propiedad al leerlos.

Convertidores personalizados​

Implementar ITipoConvertidor permite convertir tipos arbitrarios. Un convertidor:

  • Declara los tipos origen/destino que soporta (PuedeConvertirDesde / PuedeConvertirHacia).
  • Implementa la lógica en los métodos de conversión (ConvertirDesde / ConvertirHacia).

Puede suministrarse mediante un ITipoConvertidorProveedor propio o asociarse a un tipo con el atributo correspondiente, para que la fábrica lo descubra automáticamente.

Extender​

Se pueden agregar proveedores adicionales a TipoConvertidorFabrica al iniciar la aplicación, para registrar convertidores específicos de un módulo. Esto permite soportar formatos propios del dominio o representaciones heredadas sin tocar el núcleo.