Automapper Formatter는 작동하지 않습니다
-
22-07-2019 - |
문제
나는 automapper 구성에 Formatter를 추가하려고 노력하고 있습니다. DateTime?
필드. 전 세계적으로 내 포맷터를 추가하려고 시도했습니다.
Mapper.AddFormatter<DateStringFormatter>();
그리고 특정 매핑 자체에서 :
Mapper.CreateMap<Post, PostViewModel>()
.ForMember(dto => dto.Published, opt => opt.AddFormatter<DateStringFormatter>());
그러나 어느 것도 작동하지 않는 것 같습니다. 항상 날짜를 일반 형식으로 출력합니다. 참조 할 때 여기에 내가 사용하는 뷰 모델과 나머지 구성은 다음과 같습니다.
public class DateStringFormatter : BaseFormatter<DateTime?>
{
protected override string FormatValueCore(DateTime? value)
{
return value.Value.ToString("d");
}
}
public abstract class BaseFormatter<T> : IValueFormatter
{
public string FormatValue(ResolutionContext context)
{
if (context.SourceValue == null)
return null;
if (!(context.SourceValue is T))
return context.SourceValue == null ? String.Empty : context.SourceValue.ToString();
return FormatValueCore((T)context.SourceValue);
}
protected abstract string FormatValueCore(T value);
}
PostViewModel :
public int PostID { get; set; }
public int BlogID { get; set; }
public string UniqueUrl { get; set; }
public string Title { get; set; }
public string Body { get; set; }
public string BodyShort { get; set; }
public string ViewCount { get; set; }
public DateTime CreatedOn { get; set; }
private DateTime? published;
public DateTime? Published
{
get
{
return (published.HasValue) ? published.Value : CreatedOn;
}
set
{
published = value;
}
}
내가 뭘 잘못하고 있죠?
감사!
해결책
Formatters는 대상 멤버 유형이 "String"유형 인 경우에만 적용됩니다. "게시 된"이 유형의 "DateTime?"이므로 Formatter는 결코 적용되지 않습니다. 여기에는 몇 가지 옵션이 있습니다.
- 위에 놓인 동작과 함께 게시 된 속성을 게시물 객체에 추가하십시오.
- 먼저 DateTime을 해결하는 게시 된 속성에 대한 사용자 정의 리졸버를 만듭니다. 속성 로직에서 값을 발행 한 다음 게시 된 대상 멤버 유형을 문자열로 변경하십시오. 먼저, 리졸버가 실행됩니다. 다음으로 Formatter는 사용자 정의 리졸버의 결과를 가져오고 마지막으로 결과 값이 게시되었습니다.
- htmlhelper와 같은 내용으로 모든 사용자 정의 유형 -> 문자열 서식을 수행하십시오.
우리는 보통 1), 표시되는 값이 진정 으로이 견해에만 해당되지 않는 한, 옵션 2로갑니다.
다른 팁
이렇게 시도해보십시오.
Mapper.CreateMap<DateTime?, string>().ConvertUsing(d => d.Value.ToString("d"));
요구 사항을 충족하도록 기능을 변경할 수 있습니다.
제휴하지 않습니다 StackOverflow