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.
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;
a nie możesz po prostu przed obiektem wysłać jego opis - co to jest i tyle?
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;
}
Możesz też stworzyć klasę opakowująca:
class KlasaOpakowująca {
WspolnyInterfejs obiekt;
Type typObiektu;
}
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.
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.