Взгляните на protobuf.net ... Это очень хорошая библиотека сериализации (вы можете получить ее на NuGet). Кроме того, в идеале вы должны использовать оператор "using" вокруг вашего потока памяти.
Чтобы ответить на комментарий ниже, наиболее эффективный метод зависит от вашего варианта использования. Если вы точно знаете, что вам нужно для сериализации, и не нуждаетесь в сериализаторе общего назначения, тогда вы можете написать свой собственный двоичный форматер, который может вообще не иметь служебных данных (здесь есть некоторые детали пользовательские форматеры ).
Эта ссылка содержит сравнение BinaryFormatter и protobuf.net для вашей справки.