Automapper Round All Decimal Type Instances
Мне нужен способ добавить округление в конфигурацию моего автопроизводителя. Я попытался использовать IValueFormatter как предложено здесь: Automapper Установите Десятичные знаки, чтобы все были 2 десятичных знака
Но AutoMapper больше не поддерживает форматеры. Мне не нужно преобразовывать его в другой тип, поэтому я не уверен, что преобразователь типов также является лучшим решением.
Есть ли еще хорошее решение для этой проблемы?
Использование AutoMapper версии 6.11
2 ответа
Это полный MCVE, демонстрирующий, как вы можете настроить отображение decimal
в decimal
, В этом примере я округляю все десятичные значения до двух цифр:
public class FooProfile : Profile
{
public FooProfile()
{
CreateMap<decimal, decimal>().ConvertUsing(x=> Math.Round(x,2));
CreateMap<Foo, Foo>();
}
}
public class Foo
{
public decimal X { get; set; }
}
Здесь мы демонстрируем это:
class Program
{
static void Main(string[] args)
{
Mapper.Initialize(x=> x.AddProfile(new FooProfile()));
var foo = new Foo() { X = 1234.4567M };
var foo2 = Mapper.Map<Foo>(foo);
Debug.WriteLine(foo2.X);
}
}
Ожидаемый результат:
1234,46
Хотя это правда, что Automapper знает, как отобразить decimal
к decimal
Из коробки мы можем переопределить конфигурацию по умолчанию и указать, как сопоставить их с нашими потребностями.
Приведенный выше ответ правильный. Просто хотел указать, что мы также можем добиться этого с помощью AutoMapper вместо
Profiles
.
Мы можем изменить приведенный выше код, чтобы использовать
MapperConfiguration
следующее.
Определите класс Foo
public class Foo
{
public decimal X { get; set; }
}
Измените основной метод следующим образом:
class Program
{
private IMapper _mapper;
static void Main(string[] args)
{
InitialiseMapper();
var foo = new Foo() { X = 1234.4567M };
var foo2 = _mapper.Map<Foo>(foo);
Debug.WriteLine(foo2.X);
}
private void InitialiseMapper()
{
var mapperConfig = new MapperConfiguration(cfg =>
{
CreateMap<decimal, decimal>().ConvertUsing(x=> Math.Round(x,2));
CreateMap<Foo, Foo>();
});
_mapper = mapperConfig.CreateMapper();
}
}