DynamicCastHelper использует атрибут DynamicCastHelperSizeAttribute, чтобы сообщить ему, каков размер поля массива - нет необходимости фиксировать его. Он использует Reflection для определения полей структуры / класса, а упомянутый выше атрибут сообщает ему размер массивов.
Вам нужно внести некоторые изменения в CDynamicCastHelper.cs, чтобы он работал:
(a) Отражение говорит вам, что байтом или байтом [] являются System.Byte и System.Byte [] соответственно.
Поэтому, когда код ищет тип «byte []», измените его на «System.Byte []». System.Byte эквивалентен байту .
(b) В функции _GenerateFieldsCast она проверяет, является ли каждое поле классом или типом-примитивом. System.Byte [] имеет IsClass, равный true, поэтому вам необходимо явно заставить System.Byte [] обрабатываться как примитивный тип (чтобы двоичный читатель мог читать непосредственно в него):
if (objField.FieldType.IsClass && objField.FieldType != typeof(System.Byte[]))
Пример использования:
public class SampleClass2b
{
public Int16 a;
[DynamicCastHelperSizeAttribute(5)]
public byte[] ba; //{ get; set; }
[DynamicCastHelperSizeAttribute(4)]
public byte[] bb; //{ get; set; }
public Int32 c;
}
byte[] data2b = new byte[] { 0, 17, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 10 };
SampleClass2b clas2b = new SampleClass2b();
CDynamicCastHelper.CastIntoFields(clas2b, data2b, CastOptions.ReverseDWord | CastOptions.ReverseWord);