Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Serializzare oggetti in processi diversi
mercoledì 16 marzo 2005 - 13.16
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
ffederico
Profilo
| Newbie
25
messaggi | Data Invio:
mer 16 mar 2005 - 13:16
Ho un problema che non riesco in nessun modo a risolvere.
La situazione e' questa:
Ho una classe A che implementa un'interfaccia IA.
[Serializable]
public class A : IA {
}
Ho poi diverse altre classi che derivano da A. es:
[Serializable]
public class B : A {
}
[Serializable]
public class C : A {
}
Inserisco le classi in una hastable:
ht.Add( "1",b1 );
ht.Add( "2",c2 );
...
dove b1, c2 ecc sono classi derivate da A.
Serializzo l'hashtable in memoria e mi ritorna un array di byte: byte[] buffer.
byte[] buffer = serializza( ht );
I byte letti li passo alla funzione deserializza che mi ritorna un oggetto generico (Object) che casto al tipo hashtable:
System.Collection.Hashtable myht =
(System.Collection.Hashtable)deserializza(buffer);
Dichiaro una variabile di tipo A
A rec;
e la utilizzo normalmente
System.Collections.IDictionaryEnumerator e = myht.GetEnumerator();
while( e.MoveNext() ) {
if( null != e.Value ) {
rec = (A)e.Value; // !!!!!!!
}
}
In questo modo funziona tutto. Riesco ad utilizzare rec come se fosse un oggetto di tipo B o C senza problemi.
Provo a salvare il buffer in un file su disco. Chiudo l'applicaizone e la riapro leggendomi i lfile, e comunque riesco a ricaricare l'hashtable ed a utilizzarle gli oggetti in essa contenuti allo stesso modo e senza errori.
Il problema:
lo STESSO IDENTICO codice (con chiaramente le STESSE IDENTICHE classi A, IA, B e C ) se lo utilizzo in un'altro eseguibile, diverso dall'eseguibile che ha scritto il file su disco, non mi permette di castare rec ad un tipo di classe A dicendomi che il cast non e' possibile.
La cosa strana e' che il debugger invece, visualizza correttamente gli oggetti e.value (se semplicemente li faccio scorrere). Non solo. Ma se assegno l'oggetto e.value ad una variabile tipo object me lo fa fare senza problemi, e la variabile oggetto generico, sempre nel debugger, visualizza correttamente il suo contenuto che e' esattamente quello della classe A, B o C.
Com'e' possibile questa cosa?
ffederico
Profilo
| Newbie
25
messaggi | Data Invio:
mer 16 mar 2005 - 17:41
Trovato l'inghippo.
Lo trascrivo così che qualcuno se ne ha bisogno non perda tutto il tempo che ho perso io.
Non era un problema di file ne di codice. Il problema risiede nel fatto che le classi, se utilizzate in due progetti diversi, è come se avessero un id di riconoscimento diverso. Non scendo nel dettaglio che comunque non ho approfondito (se qualcuno ne sa di più sarebbe interessante).
Per cui, per comunicare tra due applicazioni con oggetti serializzati, ho risolto inserendo gli oggetti comuni che volevo serializzare, in una dll esterna.
La dll, essendo la stessa inclusa nei due progetti, è riconoscibile da entrambi.
Così mi funziona tutto correttamente.
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !