2

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

部分 LOTA 02SUBLOT1 SUBLOT2 03TEST1 RESULT1 TEST2 RESULT2 TEST3 RESULT3

如果这是一个对象,它可能会使用下面的 Lot 对象。
部件号 (PARTA)
批号 (LOTA)
2 个子批次对象的数组(SUBLOT1 的数量为 150,SUBLOT2 的数量为 999)
3 个测试结果的数组(TEST1 的结果为 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; }
}

任何人都知道 FileHelpers 是否可以做到这一点?还有其他想法吗?我有许多不同的消息类型,所以我不想为每一种手动编码。FileHelpers 中的属性修饰方法似乎是一个非常干净的解决方案,我正在考虑扩展它,但我想确保我不会错过更好的解决方案。

4

1 回答 1

1

我相信我过去做过非常相似的事情。

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

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

教程

于 2011-08-11T23:15:06.727 回答