Have a look at
Default Marshaling for Arrays[
^] on MSDN - there's an example of what you're trying to do at the bottom:
[Serializable]
[SuppressUnmanagedCodeSecurity]
[Guid("AA612D65-AE0E-4C51-9A35-79A76FF20747")]
public struct STData2
{
public long tTimeStamp;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public STData1[] tData;
}
NB: The order of the fields in the C# structure needs to match the order of the fields in the C++ structure.