static void DebugBytes(string name, byte[] bytes, List <Type> dataLookup) { var hex = System.BitConverter.ToString(bytes).Replace("-", ""); var ascii = System.Text.Encoding.ASCII.GetString(bytes); var outputTxt = ""; outputTxt += $"{debugCount} RECV {name}\n"; debugCount++; if (dataLookup == null) { outputTxt += $"\tNo data lookup\n"; outputTxt += $"\tHex: {hex}\n"; outputTxt += $"\tAscii: {ascii}\n"; } else { debugBitStreamReader.Encapsulate(bytes); int index = 0; debugBitStreamReader.Serialize(ref index); if (index < 0 || index >= dataLookup.Count) { outputTxt += $"\tReceived invalid event index: {index} out of {dataLookup.Count}\n"; outputTxt += $"\tHex: {hex}\n"; outputTxt += $"\tAscii: {ascii}\n"; } else { try { IBitSerializable data = (IBitSerializable)Activator.CreateInstance(dataLookup[index]); data.Serialize(debugBitStreamReader); outputTxt += $"\t{dataLookup[index]}\n"; outputTxt += DeepPrint(data, 2, printableProps) + "\n"; } catch (Exception e) { outputTxt += $"\tFailed to read data because: {e}"; } } } Console.WriteLine(outputTxt); }