Witam.
Używam BinaryFormatter do serializacji i deserializacji pakietów. Najpierw przesyłam string nazwę klasy pakietu, a potem zaserializowany pakiet w bajtach. Problem jest taki że przy deserializacji zwracany jest typ object i nie wiem jak zrobić aby stał się typem danego pakietu, może pokażę na przykładzie w czym problem. Pakiet to klasa bazowa abstrakcyjna.
public void Receive(Gniazdo gniazdo)
{
string rodzajString = gniazdo.Reader.ReadString(); // to mi zwraca nazwę klasy pakietu może być do np. FilePacket, albo InfoPacket
Type typPakietu = Assembly.GetAssembly(typeof(Pakiet)).GetType(rodzajString); // pobieram typ pakietu
Pakiet pakiet = Deserialize(gniazdo.Reader.BaseStream) as Pakiet; // pobieram bajty i je deserializuje
// chciałbym teraz zrobić aby zmienna pakiet wewnętrznie zmieniła swój typ na typPakietu aby następująca instrukcja zwróciła true
bool czyDziala = pakiet is FilePacket; // przy zalozeniu typPakietu to np. FilePacket chciałbym aby cos zrobić aby ta instrukcja zwrocila true
}
private static object Deserialize(Stream stream)
{
BinaryFormatter bt = new BinaryFormatter();
return bt.Deserialize(stream);
}
// kawalek klasy gniazdo
public abstract class Gniazdo : IDisposable
{
public object LockWriter { get; set; }
public BinaryWriter Writer { get; set; }
public BinaryReader Reader { get; set; }
public TcpClient Client { get; set; }
}
Coś takiego np. zwróci true bo gdzieś wewnętrznie jest przechowywana informacja że adres na który wskazuje obj jest intem. Da się jakoś do tej informacji dobrać i ją zmienić?
int a = 2;
object obj = a;
bool czyDziala = obj is int;