You may fix it by using fixed keyword. But in this case you also need to check "Allow unsafe code" in the project properties. So your struct will be:
[StructLayout(LayoutKind.Explicit, Pack = 1)]
public unsafe struct PNIO_ADDR
{
[FieldOffset(0)]
public PNIO_IO_TYPE AddrType;
[FieldOffset(4)]
public PNIO_IO_TYPE IODataType;
// container, size:20bytes
[FieldOffset(8)]
//[MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
public fixed uint Reserved[5];
[FieldOffset(8)]
[MarshalAs(UnmanagedType.U4)]
public uint Addr;
}