Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - serializzazione
Forum - C# / VB.NET - serializzazione - Pagina 2

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


Messaggi: 2339
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 2:22
Domenica, 03/11/2013
Testo quotato

nessuno:

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




C'è ovviamente L'editor è L'eseguibile.
L'editor è un programma estremamente complesso che utilizza svariate strutture classi e algoritmi.
Interprete ed editor per lua interno e database basato su dataset xml.

da qui si può notare il tool di sviluppo

http://imageshack.us/a/img811/2391/catturasb.jpg


Dove si disegnano le mappe e si hanno tutti i tool a disposizione per creare il proprio gioco.

Il suo Namespace è: MMORpgmaker_Studio

mentre l'eseguibile

http://imageshack.us/a/img801/7420/81335060.png

Ha come namespace: MMORpgmaker

Il problema era questo:

Se provavo a salvare una semplice stringa di testo da MMORpgmaker_Studio  ed aprirla da MMORpgmaker
mi funziona tranquillamente perchè non fà altro che serializzare una semplice stringa.

Ma quando poi si và a serializzare oggetti di tipo list
noto che all'interno del file trovo prima del contenuto un qualcosa di tipo  


ÿÿÿÿ          IMMORpgmaker Studio, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null   ‡System.Collections.Generic.List`1[[MMORpgmaker.Form1+layer, MMORpgmaker Studio, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]   _items_size_version  MMORpgmaker.Form1+layer[]          3   Ï             MMORpgmaker.Form1+layer      QSystem.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3aüÿÿÿMMORpgmaker.Form1+layer   imgidxy   System.Drawing.Bitmap   


Riaprendo la mappa con lo stesso programma (questo ovvero l'ide di sviluppo) funziona regolarmente.


ma aprendolo con l'eseguibile ho questo errore:

Impossibile trovare l'assembly 'MMORpgmaker Studio'

Ma ho modificato di tutto.
Spazio dei nomi, e l'assembly interno del programma.
ma non capisco ancora il perchè di questo problema


ho provato anche ad applicare al formatter

System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple;

che evita appunto questo ma evidentemente non và.



Ultima modifica effettuata da Thejuster il 03/11/2013 alle 2:30


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 9:44
Domenica, 03/11/2013
Ottimo post ... ma il codice non c'è ...

Con quale codice serializzi?

Con quale codice deserializzi?

Ultima modifica effettuata da il 03/11/2013 alle 9:45
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 10:14
Domenica, 03/11/2013
nessuno: non c' è nessuno che gli impedisca di mischiare. Comunque la mia soluzione l' ho data........ Thejuster sai che se tutto dovesse fallire ne hai già una pronta

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 10:24
Domenica, 03/11/2013
Testo quotato

Postato originariamente da TheDarkJuster:

nessuno: non c' è nessuno che gli impedisca di mischiare.



Guarda ... a me non interessa la polemica ma solamente l'informatica.

Se operi con .NET e le classi del framework non ha alcun senso mischiare chiamate a codice nativo per ottenere, molto difficilmente, quello che il framework è già pronto a fornire usando unicamente le sue classi.

La tua soluzione (con fwrite e fread) non è affatto pronta ma presuppone un bel po' di codice per l'uso di codice non managed ... ma non mi interessa discutere oltre.

PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 10:31
Domenica, 03/11/2013
Intendevo che la soluzione è pronta, non il codice xD. Comunque io continuo a non vederci niente di male.... E poi non penso che il .NET framework si appoggi al .NET framework lol, quindi il mischiotto è già stato fatto.........

PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2339
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 10:43
Domenica, 03/11/2013
Ieri sera facendo svariate ricerche su google ho potuto capire che la cosa è altamente improbabile che funzioni.

Perchè nel file è memorizzato l'assembly del programma con il quale viene effettuato il salvataggio.
Compreso la form di utilizzo e le relative posizioni delle liste.

Quindi per funzionare dovrei replicare la stessa ed identica cosa nel motore di gioco.

ma xna è WinForm sono 2 cose completamente diverse.

L'unica soluzione plausibile che ho trovato, e quella di utilizzare una classe o una libreria che faccia come ponte tra le due applicazioni.

nessuno il codice che ho usato e semplicissimo.

Codice sorgente - presumibilmente C# / VB.NET

  1. FileStream fs = new FileStream(destinazione + "\\" + titolo + "\\Content\\data\\MapData\\" + treeView1.SelectedNode.Text + ".map", FileMode.Create, FileAccess.Write);
  2.                 BinaryFormatter formatter = new BinaryFormatter();
  3.                 formatter.AssemblyFormat = System.Runtime.Serialization.Formatters.FormatterAssemblyStyle.Simple;
  4.  
  5.                 formatter.Serialize(fs, Layer1);
  6.  
  7.                 fs.Close();



Deserializzazione

Codice sorgente - presumibilmente C# / VB.NET

  1. FileStream fs = new FileStream(destinazione + "\\" + titolo + "\\Content\\data\\MapData\\" + treeView1.SelectedNode.Text + ".map", FileMode.Create, FileAccess.Write);
  2.                 BinaryFormatter formatter = new BinaryFormatter();
  3.  
  4.                 Layer1 = (List<layer>)formatter.Deserialize(fs);
  5.  
  6.                 fs.Close();



ho tentato anche questa soluzione

http://chandpriyankara.blogspot.it/2010/02/c-binaryformatt ...


unico suggerimento forse buono.

The poster suggests that perhaps you develop a separate assembly (DLL) that does all of the serialization/de-serialization. Then call that from your CreateData and ReadData programs.

If you examine the contents of "DataFile.dat" in an editor capable of viewing hex, you can see that the "CreateData" assembly is tagged to the data in file. When your ReadData program comes along and attempts to read the data, you get the error.

One assembly that reads and writes the data would alleviate that issue.


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 10:50
Domenica, 03/11/2013
Forse puoi prendere spunto da questo articolo/codice

http://www.codeproject.com/Articles/311944/BinaryFormatter ...

...

PM Quote
Avatar
GN (Member)
Guru


Messaggi: 772
Iscritto: 30/04/2011

Segnala al moderatore
Postato alle 13:46
Domenica, 03/11/2013
(Forse è un'idea balorda ma magari funziona) per aggirare i problemi di namespace potresti mettere la struttura da serializzare in un nuovo progetto libreria di classi (dll) che poi referenzi in entrambi i progetti degli eseguibili.

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo