C#FileHelpers从写入中排除字段
本文关键字:排除 字段 C#FileHelpers | 更新日期: 2023-09-27 18:21:34
我正在使用Filehelpers将类的集合导出到csv文件。
该类用于存储用户信息,有5个字段,我想在不同的情况下导出不同的字段。所以集合要么是所有新用户,其中我只有字段1,2,3的值,要么是删除的用户,其中只有字段1,4,5有值。我声明这些字段是可选的,但是当我调用write文件时,所有字段都包含在输出中。
有人知道做这件事的最佳方法吗?我有点困惑。
[FieldOptional()]
[FieldQuoted('"', QuoteMode.AlwaysQuoted, MultilineMode.NotAllow)]
public String JobTitle;
[FieldOptional()]
[FieldQuoted('"', QuoteMode.AlwaysQuoted, MultilineMode.NotAllow)]
public String Department;
FieldOptional
属性仅在导入时使用,表示导入文件中可能缺少字段。
从您的问题中还不清楚,在新用户(例如)的情况下,您是否需要字段4和字段5显示为空
Field1, Field2, Field3,,,
在这种情况下,您可以将Field4和Field5设置为null。
或者你可能希望它们完全省略,
Field1, Field2, Field3
在这种情况下,您可以使用AfterWriteEvent
。类似的东西
var engine = new FileHelperEngine<Person>();
engine.AfterWriteRecord += engine_AfterWriteRecord;
static void engine_AfterWriteRecord(EngineBase engine, AfterWriteEventArgs<Person> e)
{
// trim trailing empty separators
e.RecordLine = e.RecordLine.TrimEnd(',');
}
作为附加事件的替代方案,您可以让FileHelpers类实现INotifyWrite<T>
接口
[DelimitedRecord(",")]
class User : INotifyWrite<User>
{
public string Field1;
public string Field2;
public string Field3;
public string Field4;
public string Field5;
public void BeforeWrite(BeforeWriteEventArgs<User> e)
{
}
public void AfterWrite(AfterWriteEventArgs<User> e)
{
e.RecordLine = e.RecordLine.Trim(',');
}
}