我有一些映射代码如下
Mapper.CreateMap<CalculationQueryResult, CalculationViewModel>()
.SetDefault<int,string>(opt => opt.ResolveUsing<FormattedCurrencyInt>())
.ForMember(poco => poco.Count, x=>x.MapFrom(s => s.Count.ToString()));
正如您所看到的,我使用相同的解析器映射多个成员,以将整数转换为格式化的货币字符串。我为绝大多数人做了这件事,但并不是我所拥有的所有成员。
如果我不需要继续重复这些类型,那么所有这些成员都将使用基于约定的映射进行映射。它为大量的代码编写了大量的代码。
是否有任何方法可以覆盖将int转换为单个地图的字符串的默认行为,然后执行自定义.ForMembers,我想要不同的东西。比如这个:
var bodyParser = require('body-parser');
var app = express();
port = parseInt(process.env.PORT, 10) || 8080;
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: true }));
// parse application/json
app.use(bodyParser.json());
app.listen(port);
app.post("/someRoute", function(req, res) {
console.log(req.body);
res.status(200).json({ status: 'SUCCESS' });
});
答案 0 :(得分:4)
您可以将默认映射创建为
Mapper.CreateMap<int, string>().ConvertUsing<FormattedCurrencyIntConverter>();
private class FormattedCurrencyIntConverter : TypeConverter<int, string> {
protected override string ConvertCore(int numericValue) {
return numericValue.ToString("C2"); // format here ...
}
}
但请注意,此映射规则将适用于所有整数!可能会对某些成员覆盖此规则,但我没有对其进行测试。
PS:我建议明确记下所有映射规则,不要依赖基于约定的映射。如果仅在一侧重命名属性,则基于约定的映射会中断,但IDE可以自动重构显式规则。
答案 1 :(得分:0)
您无法以所描述的方式将相同的值解析器应用于多个成员。
它可以覆盖所有映射的从int到string的默认映射,如Georg Patscheider所建议的那样,但这可能会比原始问题更糟糕。
您必须逐行写出映射。