将结构转换为对象数组

将结构转换为对象数组

问题描述:

我正在读取二进制文件中的结构集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();