tutorial mvc inicializar imapper example ejemplo c# .net mapping automapper automapper-2

c# - mvc - Uso de AutoMapper para asignar la propiedad de un objeto a una cadena



inicializar automapper c# (2)

Esto se debe a que está intentando asignar el tipo de destino real en lugar de una propiedad del tipo de destino. Puedes lograr lo que quieras con:

Mapper.CreateMap<Tag, string>().ConvertUsing(source => source.Name ?? string.Empty);

aunque sería mucho más simple simplemente anular ToString en la clase Tag.

Tengo el siguiente modelo:

public class Tag { public int Id { get; set; } public string Name { get; set; } }

Quiero poder usar AutoMapper para asignar la propiedad Name del tipo de Tag a una propiedad de cadena en uno de mis modelos de vista.

He creado una resolución personalizada para tratar de manejar este mapeo, usando el siguiente código:

public class TagToStringResolver : ValueResolver<Tag, string> { protected override string ResolveCore(Tag source) { return source.Name ?? string.Empty; } }

Estoy mapeando usando el siguiente código:

Mapper.CreateMap<Tag, String>() .ForMember(d => d, o => o.ResolveUsing<TagToStringResolver>());

Cuando ejecuto la aplicación me sale el error:

La configuración personalizada para miembros solo se admite para miembros individuales de nivel superior en un tipo.

¿Qué estoy haciendo mal?


ForMember significa que está proporcionando asignación para un miembro donde desea una asignación entre tipos. En su lugar, usa esto:

Mapper.CreateMap<Tag, String>().ConvertUsing<TagToStringConverter>();

Y el convertidor es

public class TagToStringConverter : ITypeConverter<Tag, String> { public string Convert(ResolutionContext context) { return (context.SourceValue as Tag).Name ?? string.Empty; } }