在Filehelpers记录对象

时间:2015-11-24 14:05:10

标签: c# filehelpers

我正在使用Filehelpers库解析BgMax文件(由行分隔的普通文本文件,每个属性在行中具有特定长度),并且我已成功使用FixedLengthRecord创建了对象和记录。但是我想将每条记录的整行存储为字符串,而不仅仅是作为对象的属性。是否有一种简洁的方法,如在Record类中添加FieldHidden属性或其他内容,以便自动保存整行?我还想在创建Record对象时保存该行,但我认为这样做有点复杂/不太好,因为我认为我需要通过反射访问该属性。

这里的一个例子是我使用的记录类之一

[FixedLengthRecord(FixedMode.AllowMoreChars)]
   public class StartRecord
   {
      [FieldFixedLength(2)]
      public string PostType;

      [FieldFixedLength(20)]
      public string LayoutName;

      ...

      [FieldFixedLength(1)]
      public string TestMarker;
   }

在这个StartRecord类中,我希望有另一个名为Source的字符串属性,它将在转换为object之前包含整行。 该对象正在从这段代码填充,并且很容易获得该行,因为它记录来自记录列表的foreach循环。

switch (record.Substring(0, 2))
{
   case "01":
       return typeof (StartRecord);                
} 

所以我可以在这里填充这个属性,但我不喜欢它。

1 个答案:

答案 0 :(得分:1)

您可以使用事件界面:

[FixedLengthRecord(FixedMode.AllowMoreChars)]
public class StartRecord
    : INotifyRead
{
  [FieldFixedLength(2)]
  public string PostType;

  ...

  // Field hidden to the lib
  [FieldHidden]
  public string Source;


  public void BeforeRead(BeforeReadEventArgs e)
  {
      this.Source = e.RecordLine;
  }

  public void AfterRead(AfterReadEventArgs e)
  {   
  }

}