Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - serializzazione
Forum - C# / VB.NET - serializzazione

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1704
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 13:11
Sabato, 02/11/2013
salve ragazzi magari voi avete gia trovato questo problema in passato.

Ho la necessita di serializzare una lista di elementi tramite una struttura.

fin qui tutto bene il salvataggio viene effettutato.

il problema sorge dopo quando provo a rileggere la serializzazione effettua da un'altro programma.

All'inizio mi dava problemi. perche nel file veniva serializzato anche il namespace.

rinominando il namespace dell'altro programma uguale a quello con cui ho effettuato la serializzazione funziona.

pero questo non avviene se provo a leggere la lista.
anche se la lista e struttura dell'altro programma sono esattamente le stesse.

chiedevo esiste qualche altra cosa oltre al namespace che puo dare problemi di deserializzazione?


PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1452
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 17:55
Sabato, 02/11/2013
ma tipo se hai l' elemento corrente della lista che è definito come "struct Elemento attuale" perchè non puoi fare:
Codice sorgente - presumibilmente Plain Text

  1. fwrite (&attuale , sizeof(struct Elemento), 1, File);


?

poi per rileggere ottieni la dimensione in byte del file, la dividi per sizeof(struct Elemento) e fai un ciclo che legga un elemento per volta e lo inserisca nella lista:

Codice sorgente - presumibilmente Plain Text

  1. fread (&attuale , sizeof(struct Elemento), 1, File);



Non vedo perchè questo non dovrebbe funzionare....... O forse sono io che non ho capito bene? O magari non puoi fare così?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5473
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 20:00
Sabato, 02/11/2013
Testo quotato

Postato originariamente da TheDarkJuster:

...



Mi sembra che tu parli di C/C++ mentre lui parla di C# ...

E così ?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1452
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 20:08
Sabato, 02/11/2013
si ma esiste il C++.NET al massimo può farsi una libreria apposita per questo lavoro, non credo sia questo il problema.........

PM Quote
Avatar
Thejuster (Member)
Guru^2


Messaggi: 1704
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 20:23
Sabato, 02/11/2013
Juster il motivo per cui ho usato la serializzazione e proprio per questo :rotfl:

ti spiego.

il tutto riguarda sempre il mio engine.

Ti mostro un banale esempio di una mappa di gioco


questa sarebbe una sola riga di un file map.dat contenente coordinate e vari settaggi di ogni blocco 32x32px


bid:0|x:10|y:20|tile:forest.png|rect_x:0|rect_y:0|rect_w:32|rect_h:32

a questo si aggiungono le luci

x,y,z,w,a,r,g,b,rg,spec,norm ecc. ecc.

immagina il macello che si creerebbe solo nel splittare una riga del genere.
quando al massimo potrei semplicemente fare

Codice sorgente - presumibilmente C++

  1. [Serializable]
  2. struct Layer
  3. {
  4.  
  5. public int id;
  6. public int x;
  7. public int y; //ecc. ecc.
  8.  
  9. }
  10.  
  11.  
  12. List<Layer> Layer1 = new List<Layer>();
  13.  
  14.  
  15.  
  16. //implementazione del binary formatter e dello stream.
  17.  
  18. Layer1 = (List<Layer>)formatter.deserialize(stream);
  19.  
  20. //fine



Come vedi c'è una bella differenza in più si risparmiano ore di programmazione
il più viene già tutto comodamente posizionato nelle liste con relativo id [index] etc..


PM Quote
Avatar
ZioCrocifisso (Member)
Pro


Messaggi: 135
Iscritto: 06/03/2013

Segnala al moderatore
Postato alle 21:02
Sabato, 02/11/2013
Ma anche no, la serializzazione che fornisce il .NET aggiunge un sacco di roba inutile, e crea problemi come questo del topic.
È meglio farsela a mano, non usando Split e roba simile però. Se non vuoi farti il tuo formato col tuo parser, puoi sempre usare formati come JSON (che risolve il tuo problema), per il quale ci sono già le librerie (anzi, è anche meglio).

Ultima modifica effettuata da ZioCrocifisso il 02/11/2013 alle 21:05


PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5473
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:40
Sabato, 02/11/2013
Postato originariamente da TheDarkJuster:

Testo quotato

si ma esiste il C++.NET



Sicuramente non usa fwrite e fread, funzioni del C (nativo) e che non hanno molto a che vedere con C++.NET (managed) né tanto meno con C#.

Testo quotato

non credo sia questo il problema



Invece, scusa, ma mi sembra che sia necessario indicare a chi scrive che le funzioni indicate non sono quelle giuste. Non penso te la debba prendere ... ho solo dato un'indicazione più precisa.


Postato originariamente da TheJuster

Per la serializzazione .NET può essere utile questo

http://msdn.microsoft.com/en-us/library/ms973893.aspx

@Thejuster ... il codice che usi per scrivere qual è?
Hai parlato di un altro programma che serializza ...

Ultima modifica effettuata da nessuno il 02/11/2013 alle 21:53


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1452
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 0:09
Domenica, 03/11/2013
nessuno io intendevo che Thejuster può farsi una libreria in C++.net che faccia il lavoro "sporco" con, appunto, librerie C, per poi richiamarsi i metodi...... Il problema più grande è farsi la struttura da scrivere sul file, o comunque organizzare la scrittura di una serie di strutture, in alternanza a non-strutture...... Quindi può fare un ciclo che ad ogni elemento della lista salvi nel file. Secondo me è comunque meglio di usare i memodi forniti dal .NET framework, però vedi tu....... Certo che mettere nel file anche il nome del namespace non mi pare una gran bella idea, e che alla microsoft potevano fare le cose un pelino meglio....

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5473
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 0:46
Domenica, 03/11/2013
E quello che cercavo di dirti io è che non si mischia codice nativo C/C++ con codice managed .NET.

Non c'è alcun bisogno di farlo perché i linguaggi .NET devono sfruttare il framework e le sue classi, non le funzioni di libreria nativa C.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo