public static object ReadHeader(Stream data) { var baseHeader = data.ReadStruct <BaseHeader>(); var baseSize = Marshal.SizeOf <BaseHeader>(); if (baseHeader.size < baseSize) { throw new Exception("Unexpected header size"); } if (baseHeader.size == baseSize) { return(baseHeader); } if (baseHeader.platformId.Value == 0x44583131) { //dx11 platform var dx11Size = Marshal.SizeOf <DX11Header>(); var extraBytesCount = dx11Size - baseSize; var extraBytes = data.ReadBytes(extraBytesCount); var baseBytes = MemoryUtils.StructToBytes(baseHeader); List <byte> dx11Bytes = new List <byte>(); dx11Bytes.AddRange(baseBytes); dx11Bytes.AddRange(extraBytes); return(MemoryUtils.BytesToStruct <DX11Header>(dx11Bytes.ToArray())); } throw new Exception("Unknown platform"); }