我正在使用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);
}
所以我可以在这里填充这个属性,但我不喜欢它。
答案 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)
{
}
}