C# 使用固定长度字段的可变长度数组分析消息

C# 使用固定长度字段的可变长度数组分析消息,c#,.net,parsing,filehelpers,C#,.net,Parsing,Filehelpers,我需要解析(并构建)固定长度的基于文本的消息,这些消息在某些情况下可能包含数组字段。 例如: 第A部分LOTA 02子批次1子批次2 03测试1结果1测试2结果2测试3结果3 如果这是一个对象,它可能会使用下面的Lot对象。 零件号(零件A) 批号(LOTA) 由2个子批次对象组成的数组(子批次1的数量为150,子批次2的数量为999) 由3个测试结果组成的数组(测试1的结果为1234.67890,…) 请注意,在消息中指定了数组项的数量 我希望使用人们谈论过的FileHelpers库,但它似乎

我需要解析(并构建)固定长度的基于文本的消息,这些消息在某些情况下可能包含数组字段。
例如:

第A部分LOTA 02子批次1子批次2 03测试1结果1测试2结果2测试3结果3

如果这是一个对象,它可能会使用下面的Lot对象。
零件号(零件A)
批号(LOTA)
由2个子批次对象组成的数组(子批次1的数量为150,子批次2的数量为999)
由3个测试结果组成的数组(测试1的结果为1234.67890,…)
请注意,在消息中指定了数组项的数量

我希望使用人们谈论过的FileHelpers库,但它似乎不支持多个数组字段,其中有另一个字段指定数量,并且它不支持本身具有[FixedLengthRecord()]属性的字段类型

这就是我希望能够做到的。请注意,字段长度10只是保持此简单性的一个人工制品。并非所有字段通常都定义为相同的长度

[FixedLengthRecord()]
public class Lot
{
    [FieldFixedLength(10)]
    public string PartNumber { get; set; }
    [FieldFixedLength(10)]
    public string LotNumber { get; set; }
    [FieldFixedLength(10)]
    public SubLot[] SubLots { get; set; }
    [FieldFixedLength(10)]
    public Test[] Tests { get; set; }
}

[FixedLengthRecord()]
public class SubLot
{
    [FieldFixedLength(10)]
    public string SubLotNumber { get; set; }
    [FieldFixedLength(10)]
    public int Quantity { get; set; }
}

[FixedLengthRecord()]
public class Test
{
    [FieldFixedLength(10)]
    public string Description { get; set; }
    [FieldFixedLength(10)]
    public double Result { get; set; }
}

有人知道这在FileHelper中是否可行吗?还有其他想法吗?我有许多不同的消息类型,所以我不希望手动为每种类型编写代码。FileHelpers中的属性装饰方法似乎是一个很好的干净解决方案,我正在考虑扩展它,但我想确保我没有错过一个更好的解决方案。

我相信我在过去做过类似的事情

我解决这个问题的方法是使用自定义属性。这允许我创建类和嵌套对象,这些类和嵌套对象完全按照规范中的描述来描述我的数据,并使用自定义属性来描述数据属性(长度、类型、填充要求,如果需要等)

最后,我还为类和属性编写了自定义序列化/反序列化,但这实际上是特定于实际应用程序的,因为数据是通过自定义政府协议发送的,该协议还通过带有延续码的加密套接字以固定大小的块或包发送和接收数据

教程

在问题标题中使用“固定长度”一定是错误的。很难让固定长度的字符串包含可变数量的数组元素。.NET TextFieldParser类是解析此类文件的优秀解决方案。您使用FileHelpers获得解决方案了吗?