Я читаю в двоичном файле в структуре с установленным StructLayout(LayoutKind.Explicit)
. Мне нужно переместить эти данные в DAO со структурой Object[]
. Вместо того, чтобы вручную вводить каждое из 40 или около того полей, которые находятся в структуре, я просто хотел бы использовать отражение и преобразовать все элементы, не начинающиеся с «Неизвестно». Вот что у меня есть.
[StructLayout(LayoutKind.Explicit, CharSet=CharSet.Ansi)]
struct ClientOld : IStuctToArray
{
[FieldOffset(0)]
public byte Active;
[FieldOffset(1)]
[MarshalAs(UnmanagedType.AnsiBStr)]
public string Title;
[FieldOffset(10)]
[MarshalAs(UnmanagedType.AnsiBStr)]
public string LastName;
[FieldOffset(36)]
[MarshalAs(UnmanagedType.LPArray, SizeConst = 2)]
public byte[] Unknown1;
(...)
[FieldOffset(368)]
[MarshalAs(UnmanagedType.AnsiBStr)]
public string AddedBy;
[FieldOffset(372)]
[MarshalAs(UnmanagedType.LPArray, SizeConst = 22)]
public byte[] Unknown7;
public object[] ToObjectArray()
{
return this.GetType().GetFields()
.Where(a => !a.Name.StartsWith("Unknown"))
.Select(b => /* This is where I am stuck */)
.ToArray();
}
}
Я не знаю, что поместить в область выбора, чтобы получить значение моего поля. b.GetValue
требует от вас передать объект, а я не знаю, какой объект передать.
Любая помощь будет принята с благодарностью.