Deserializacja obiektów o różnych typach

Deserializacja obiektów o różnych typach
B3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 21
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.

TO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
0

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

Kopiuj
if (zmienna is Twoj_typ)
      rzutowanie na Twoj_typ i deserializacja;
abrakadaber
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6610
0

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

  • Rejestracja: dni
  • Ostatnio: dni
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 :

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

  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
class KlasaOpakowująca {

    WspolnyInterfejs obiekt;
    Type typObiektu;

}
 
somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
0
niezalogowany napisał(a):
Kopiuj
 
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.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
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.