C#FileHelpers从写入中排除字段

时间:2014-09-12 09:28:56

标签: c# filehelpers

我正在使用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;

1 个答案:

答案 0 :(得分:1)

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