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;

C#FileHelpers从写入中排除字段

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(',');
    }
}