C# 将实际记录作为属性包含在Filehelpers记录对象中

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

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

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

[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);                
} 

因此,我可以在这里填充属性,但我不太喜欢它。

您可以使用事件界面:

[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)
  {   
  }

}

如果需要行而不是反序列化对象,为什么不直接读取文件的行而不是对象呢?你需要提出一个更具体的问题。我们不知道您的FileHelpers库代码是什么样子的。也许你应该添加一些代码,它会变得更清晰?Filehelpers库可以在这里找到,也可以在我使用的标记的描述中找到。我还包括了一些代码,但我认为这样做的实现非常简单。最“简单”的解决方案可能是编写如下内容:
public-Soutrce{get{return-PostType+LayoutName+TestMarker}
,当然您可以进行反射。你可以在这里修改代码:我已经看到了这个线程,但我会认为这是最后的方法。我想先看看是否可以从类本身开始使用原生FileHelpers装饰。很抱歉,我没有使用FileHelpers。。。我在这个线程中看到,FileHelper可以将值解析为数组,为什么不将行解析为数组属性,然后让属性返回数组的正确索引:
publicstringpostType{get{returnarrayproperty[0]}
publicstringsource{get{string.Join(“,ArrayProperty)}
这样您就不需要额外的存储空间了。字符串.Join在不保留整个行的情况下可能表现良好。我刚刚尝试过这个。这似乎是正确的答案。但是,事件未触发,字符串仍为null。你知道为什么会这样吗?你是在读还是在写?你用的是什么发动机?什么版本的库?阅读,版本是3.1.5(我刚从nuget获得最新版本)。