Serializowane dane w tcpclient muszą określać kwotę?

Wysłałem dane jako bajt używając TcpClient i chciałem wysłać własną klasę zamiast bajtów danych.

Przez bajty danych miałem na myśli to, że wysyłam dane przekonwertowane na bajty w następujący sposób:

using (MemoryStream bufferStream = new MemoryStream())
{
    using (BinaryWriter bufferData = new BinaryWriter(bufferStream))
    {
        // Simple PONG Action
        bufferData.Write((byte)10);
    }

    _logger.Info("Received PING request, Sending PONG");
    return bufferStream.ToArray();
}

Zamiast tego chciałbym wysłać to w ten sposób, bez konieczności deklarowania jego rozmiaru lub w / e

public class MyCommunicationData
{
    public ActionType Action { get; set; }
    public Profile User { get; set; }
    ...
}

Zwykle, gdy wysyłam moje dane jako bajty, pierwsze 5 bajtów używam do wskazania akcji i rozmiaru wiadomości.

Ale jeśli przeprowadzę migrację w celu serializacji wszystkich danych jako pojedynczej klasy, czy nadal muszę wysyłać informacje o tym, jaka jest ich akcja i rozmiar lub czy korzystać z serializowanych wiadomości, klient i serwer będą wiedzieć, co czytać itd., Czy też istnieje sposób, aby to zrobić wysłać go bez konieczności określania rzeczy z obiektu serializacji?

Nie jestem pewien, czy to ma znaczenie tutaj, używamAsyncCallback czytać i zapisywać do strumienia sieciowego:

_networkStream = _client.tcpClient.GetStream();
_callbackRead = new AsyncCallback(_OnReadComplete);
_callbackWrite = new AsyncCallback(_OnWriteComplete);

Daj mi znać, jeśli chcesz, abym opublikował inne funkcje.

questionAnswers(1)

yourAnswerToTheQuestion