将结构转换为对象数组
问题描述:
我正在读取二进制文件中的结构集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
要求你传入一个对象,我不知道要传递什么对象。
任何帮助将不胜感激。
答
使用GetValue
方法,并传递给到需要的值的对象,即this
:
return this.GetType().GetFields()
.Where(f => !f.Name.StartsWith("Unknown"))
.Select(f => f.GetValue(this))
.ToArray();