1
StructLayout(LayoutKind.Explicit)
구조체에 이진 파일을 읽고 있습니다. 이 데이터를 Object[]
의 구조를 가진 DAO로 옮겨야합니다. 수동으로 구조체에있는 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
은 객체를 전달해야하며 어떤 객체를 전달해야할지 모르겠다.
도움을 주시면 감사하겠습니다.