Мне кажется, проблема в том, что вы сериализуете каждый элемент в список, а затем объединяете байты.Когда это десериализовано, это выглядит как данные для одного клиента плюс некоторые неожиданные данные (для других клиентов) в конце.
Я не знаю, как работает ваш метод сериализации, но вы, вероятно, можете просто изменить код:
foreach (T _Item in Array)
{
_ByteCollection.Add(Serialise(_Item));
}
Кому:
_ByteCollection.Add(Serialise(Array));
И это должно сработать, тогда, возможно, вы могли бы немного упростить его.