Deserializacja obiektów o różnych typach

0

Witam,
Piszę komunikator TCP/IP i muszę przesyłać obiektu różnego typu, do tego wykorzystuję serializator i zamieniam na tablicę bajtów.
Problem pojawia się w momencie deserializacji. Mogę spodziewać się 5 różnych typów obiektów. W jaki sposób określić jaki to będzie typ w celu deserializacji? Gdy przesyłałem do tej pory tylko jeden typ nie było problemu bo rzutowałem tylko na ten typ, co w przypadku wielu różnych typów?
Dziękuję za odpowiedzi.

0

Nie wiem czy to najlepsze wyjście, ale możesz wrzucić if'y, a w nich sprawdzać tak:

if (zmienna is Twoj_typ)
      rzutowanie na Twoj_typ i deserializacja;
0

a nie możesz po prostu przed obiektem wysłać jego opis - co to jest i tyle?

0

Tak, to jest poprawne rozwiązanie. Ewentualnie możesz stworzyć wspólny interfejs (może być pusty), który będzie implementować każdy obiekt, który będziesz przesyłał i wtedy przy odbiorze powiedzmy 10 obiektów możesz stworzyć listę w takiej postaci List<NazwaInterfejsu> obiekty, a później w razie potrzeby sprawdzać i rzutować na zasadzie :

 
if(obiekt is JakasKlasa) {
 JakasKlasa zrzutowany = obiekt as JakasKlasa;
}

0

Możesz też stworzyć klasę opakowująca:

class KlasaOpakowująca {

    WspolnyInterfejs obiekt;
    Type typObiektu;

}
 
0
niezalogowany napisał(a):
 
if(obiekt is JakasKlasa) {
 JakasKlasa zrzutowany = obiekt as JakasKlasa;
}

Kompletnie bezsensowny kod.

Gdy sprawdziliśmy za pomocą is, że obiekt jest instancja JakasKlasa, to nie ma sensu używać as tylko zwykłego rzutowania. Z drugiej strony, is wewnętrznie wykonuje as, więc nie zawsze ma sens.

0
JakasKlasa zrzutowany = obiekt as JakasKlasa;
if (zrzutowany != null)
{
    ...
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.