【发布时间】:2016-01-12 18:10:54
【问题描述】:
我正在使用CsvHelper 并尝试根据某些属性的值映射不同的属性。
Map(m => (m.Prop1 == Enum.Setting1 || m.Prop1 == Enum.Setting2)? m.Prop2 : m.Prop3).Name("MyProperty");
这不起作用导致异常:
System.ArgumentException : 不是成员访问 参数名称:表达式
所以我想我会尝试创建一个新类,从我的基础对象继承,然后在映射类型中指定这些。
这种新类型在属性中直接执行此逻辑。
public class NewClassCsv : BaseClass
{
public string MyProperty
{
get { return (this.Prop1 == Enum.Setting1 || this.Prop1 == Enum.Setting2) ? this.Prop2 : this.Prop3; }
}
我尝试使用这个新类作为我的地图类型,但进入助手的 WriteRecords 方法的对象是基类型,这不会进行强制转换来更改它。
所以我试着在映射上做演员:
Map(x => ((NewClassCsv)x).MyProperty);
这也不起作用,也没有找到对象上的属性。
有人遇到过这个问题并知道如何解决吗?
编辑:自定义映射器部分
csvWriter.Configuration.RegisterClassMap<CustomMap>();
public class CustomMap: CsvClassMap<NewClassCsv>
{
public override void CreateMap()
{
Map(m => m.MyProperty).Name("MyProperty");
}
}
【问题讨论】:
-
我想你想要一个自定义映射器; joshclose.github.io/CsvHelper/#mapping-runtime-mapping
-
我已经在使用自定义映射器,但投射似乎不起作用,用我的自定义映射器更新问题