gpt4 book ai didi

c# - 如何将 EnumConverter 与 CsvHelper 一起使用

转载 作者:太空狗 更新时间:2023-10-30 00:23:58 40 4
gpt4 key购买 nike

我正在使用 CsvHelper将一个类序列化为 csv 文件 - 直到这里一切正常。

现在我试图找到一种方法将类的枚举属性转换为它们在 csv 中的 int 值,这样我以后就可以使用 CSV 进行批量插入。

我在 CsvHelper 中找到了 EnumConverter 类,但我不知道如何正确使用它,因为我的所有尝试都失败了。

这是我的映射类代码

 public sealed class MyMapping : CsvClassMap<TradingCalendarException>
{
public MyMapping()
{
EnumConverter enumConverter = new EnumConverter(typeof(CalendarExceptionEntityType));

Map(m => m.ExceptionEntityType).Index(0).Name("EXCEPTION_ENTITY_TYPE").TypeConverter(enumConverter);
Map(m => m.ExceptionEntityIdentifier).Index(1).Name("EXCEPTION_ENTITY_IDENTIFIER");
Map(m => m.OptionType).Index(2).Name("OPTION_TYPE");
Map(m => m.StartDatetime).Index(3).Name("EXCEPTION_START_DATETIME");
Map(m => m.EndDatetime).Index(4).Name("EXCEPTION_END_DATETIME");
Map(m => m.DataSourceType).Index(5).Name("DATA_SOURCE_TYPE");
Map(m => m.Description).Index(6).Name("DESCRIPTION");
}
}

和写作部分

using (StreamWriter file = new StreamWriter(filePath, false, Encoding.UTF8))
{
CsvWriter writer = new CsvWriter(file);
MyMapping mapping = new MyMapping();
writer.Configuration.RegisterClassMap(mapping);

writer.WriteRecords(calendarExceptionList);
}

映射的其余部分(索引和命名)正常工作,只是 EnumConverter 没有做任何更改。

我没有在网上找到任何示例。

谢谢!

最佳答案

这是我做的解决方案:

public class CalendarExceptionEnumConverter<T> : DefaultTypeConverter  where T : struct
{
public override string ConvertToString(TypeConverterOptions options, object value)
{
T result;
if(Enum.TryParse<T>(value.ToString(),out result))
{
return (Convert.ToInt32(result)).ToString();
}

throw new InvalidCastException(String.Format("Invalid value to EnumConverter. Type: {0} Value: {1}",typeof(T),value));
}
}

并将其用作以下内容:

Map(m => m.ExceptionEntityType).TypeConverter<CalendarExceptionEnumConverter<CalendarExceptionEntityType>>();

关于c# - 如何将 EnumConverter 与 CsvHelper 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31666915/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com