[在编写csv字符串的过程中,我需要去除行中每一列的一些符号,但我无法在CsvHelper.CsvWriter.Configuration
或CsvHelper.CsvWriter.Context
或其他地方找到这种功能。
作为我可以接受的解决方法,我尝试覆盖类ConvertUsing
的方法MemberMap<TClass, TMember>
,但该方法无法正常工作:
public class CustomMemberMap < TClass, TMember >: MemberMap < TClass, TMember > {
public CustomMemberMap(MemberInfo member): base(member) {}
public override MemberMap < TClass, TMember > ConvertUsing(Func < TClass, string > convertExpression) => base.ConvertUsing(row => convertExpression(row).Replace("\r", "").Replace("\n", ""));
}
public class CustomClassMap < TClass >: ClassMap < TClass > where TClass: new() {
public override MemberMap < TClass, TMember > Map < TMember > (Expression < Func < TClass, TMember >> expression, bool useExistingMap = true) => new CustomMemberMap < TClass, TMember > (base.Map(expression, useExistingMap).Data.Member);
}
public sealed class CsvFileMapperAccommodation: CustomClassMap < Accommodation > {
public CsvFileMapperAccommodation() {
Map(m => m.Name).Name($ "AccommodationName").ConvertUsing(x => $ "{x.Name}");
Map(m => m.ExternalKey).Name($ "AccommodationExternalKey").ConvertUsing(x => $ "{x.ExternalKey}");
Map(m => m.Pension).Name($ "AccommodationPension").ConvertUsing(x => $ "{x.Pension}");
Map(m => m.Category).Name($ "AccommodationCategory").ConvertUsing(x => $ "{x.Category}");
Map(m => m.BuyingPrice).Name($ "AccommodationBuyingPrice").ConvertUsing(x => $ "{x.BuyingPrice}");
Map(m => m.Margin).Name($ "AccommodationMargin").ConvertUsing(x => $ "{x.Margin}");
Map(m => m.Price).Name($ "AccommodationPrice").ConvertUsing(x => $ "{x.Price}");
Map(m => m.Quantity).Name($ "AccommodationQuantity").ConvertUsing(x => $ "{x.Quantity}");
Map(m => m.Supplier).Name($ "AccommodationSupplier").ConvertUsing(x => $ "{x.Supplier}");
}
}
该对象(我尝试映射)包含很多属性,因此在输出中我每行大约有300个字段,因此,手动更改对象数据的开头和每个对象的值太复杂且不太美观最后的字段。因此,我仅尝试将此对象映射到一个csv字符串中,希望可以随时对其进行更改。
我认为创建自定义StringConverter
可能会满足您的需求。