这个问题有变种,但我找到的是"我在C DLL中有一个结构"。在这种情况下,我有100%的C#代码。我有一个结构,其中包含一个可变长度的结构数组,我试图编组到一个紧密压缩的字节数组。我使用了结构和Marshal.StructureToPtr,因为我需要一个紧密排列的数组,而不需要BinaryReader / Writer用来帮助它序列化和反序列化的所有元数据。
这是结构定义:
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct CharacterSelect_Struct
{
public uint CharCount;
public uint TotalChars;
[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.Struct)]
public CharacterSelectEntry_Struct[] Entries;
public static CharacterSelect_Struct Initialize(uint totalChars, uint charCount)
{
return new CharacterSelect_Struct
{
CharCount = charCount,
TotalChars = totalChars,
Entries = 0 != charCount ? new CharacterSelectEntry_Struct[charCount] : null
};
}
}
如果Entries包含1个元素,则此方法很有用。如果它包含2个或更多,我仍然只获得第一个元素的内容。
有没有办法序列化上面的内容并获取条目的所有内容,或者我是否必须手动序列化上述内容,如果有,除了这样做,"单独序列化每个条目并附加到列表,然后序列化外部结构"?
我使用了struct和Marshal.StructureToPtr方法,因为它似乎比使用类和使用BitConverter手动编写所有序列化和反序列化更容易,但我想知道是否有更简单的方法给出我需要什么..