Я использую Autopper для отображения из модели в DTO. В моей модели я хочу использовать строку, где в моем dto я использую Enum. Пока это вложенный ребенок, я использую ForPath вместо ForMember. Преобразовать в строку легко, однако, чтобы преобразовать строку обратно в тип, я написал ValueConverter. Использование ValueConverter в сочетании с ForMember работает отлично, однако теперь мне нужно использовать его с ForPath, что невозможно. Существуют ли другие решения для решения этой проблемы, хотя я не могу найти его в документации автопроизводителя или в стеке.
Это мой MappingProfile, с которым эта часть работает:
CreateMap<Dto, Model>()
.ForMember(dest => dest.Type, opt => opt.MapFrom(src => src.Type.ToString()))
.ReverseMap()
.ForMember(dest => dest.Type, opt => opt.ConvertUsing(new StringToEnumConverter<Type>(), src => src.Type));
this часть мне нужны ForPath и ConvertUsing, этот код не разрешен
CreateMap<Dto, Model>()
.ForPath(dest => dest.Type, opt => opt.MapFrom(src => src.Parent.Type.ToString()))
.ReverseMap()
.ForPath(dest => dest.Parent.Type, opt => opt.ConvertUsing(new StringToEnumConverter<Type>(), src => src.Type));
, и это мой ValueConverter:
public class StringToEnumConverter<T> : IValueConverter<string, T> where T : struct
{
public T Convert(string source, ResolutionContext context)
{
if (!string.IsNullOrEmpty(source))
{
if (Enum.TryParse(source, out T result))
{
return result;
}
}
return default;
}
}