private void SerializeStackItem(StackItemBase item, BinaryWriter writer) { switch (item) { case ByteArrayStackItem _: { writer.Write((byte)EStackItemType.ByteArray); writer.WriteVarBytes(item.ToByteArray()); break; } case BooleanStackItem bl: { writer.Write((byte)EStackItemType.Bool); writer.Write(bl.Value); break; } case IntegerStackItem _: { writer.Write((byte)EStackItemType.Integer); writer.WriteVarBytes(item.ToByteArray()); break; } case ArrayStackItem array: { if (array.IsStruct) { writer.Write((byte)EStackItemType.Struct); } else { writer.Write((byte)EStackItemType.Array); } writer.WriteVarInt(array.Count); foreach (StackItemBase subitem in array) { SerializeStackItem(subitem, writer); } break; } case MapStackItem map: { writer.Write((byte)EStackItemType.Map); writer.WriteVarInt(map.Count); foreach (var pair in map) { SerializeStackItem(pair.Key, writer); SerializeStackItem(pair.Value, writer); } break; } default: throw new NotSupportedException(); } }