Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA
In tre giorni a Las Vegas Oracle ha presentato agenti che eseguono il lavoro, l'alleanza con OpenAI e un cloud aperto agli acceleratori di tutti. Ma i clienti europei chiedono garanzie prima ancora delle funzionalità
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Abbiamo provato Samsung Galaxy Tab S12 Ultra nella versione 12 GB + 256 GB con tastiera, e il risultato è un tablet che in questa configurazione si comporta come un notebook con la fluidità tipica di Android. Spessore di 5,1 mm, display Dynamic AMOLED 2X da 14,6 pollici, MediaTek Dimensity 9500 e un software senza incertezze compongono un prodotto di vertice, con prezzi da 1.539 euro, frenato solo da un'autonomia nella parte bassa del confronto
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-11-2019, 07:52   #1
sobrano
Senior Member
 
Iscritto dal: Oct 2004
Messaggi: 903
[c#] salvare un oggetto su file per poi ricaricarlo

Salve a tutti.
Ho una List riempita con molti oggetti di una classe personalizzata.
come esempio la lista potrebbe essere fatta nel modo seguente:

1 margherita 7 euro
2 boscaiola 16 euro
1 diavola 5 euro

quindi la lista comprende in questo caso 3 oggetti di tipo Articolo(quantita, nome, prezzototale)

vorrei questa lista a disposizione anche dopo aver spento il PC per cui ho la necessita di salvare su file i 3 Articoli che popolano la lista e registrare le loro variabili dello stato interno (quantita, nome e prezzototale) in modo da poterle ricaricare alla prossima accensione del computer.

Per ora mi creo un file di testo dal quale mi vado a leggere linea per linea il file .txt e da cui mi estrapolo le variabili dello stato interno per ricreare le 3 istanze degli Articoli dopo aver riacceso il pc.

Mi chiedevo se il c# offre un metodo piu efficacie per salvare questi oggetti di tipo Articolo con tutto il loro stato interno in modo da poterli ricaricare piu facilmente senza andarmi a scandagliare linea per linea il file di testo...

grazie a tutti per eventuali suggerimenti
__________________
MB:Asus Rog Strix B450-F Gaming - Cpu:AMD Ryzen 5 2600 - RAM:2x8Gb DualCh DDR4-2400MHz Patriot Viper Elite - SkGrafica:msi GeForce GTX 1050Ti 4GB - SSD: 2 x Samsung 970 EVO 1TB nvme M.2 in RAID0 Alim: EVGA B3 750W Case: Corsair airflow 750D
sobrano è offline   Rispondi citando il messaggio o parte di esso
Old 22-11-2019, 08:41   #2
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 3302
Credo che quello che cerchi sia la serializzazione.
Questo potrebbe fare per te: https://stackoverflow.com/questions/...t-to-from-file
Kaya è offline   Rispondi citando il messaggio o parte di esso
Old 22-11-2019, 11:35   #3
sobrano
Senior Member
 
Iscritto dal: Oct 2004
Messaggi: 903
Quote:
Originariamente inviato da Kaya Guarda i messaggi
Credo che quello che cerchi sia la serializzazione.
Questo potrebbe fare per te: https://stackoverflow.com/questions/...t-to-from-file

Ciao Kaya,
grazie del suggerimento. Si effettivamente sembra che questo argomento potrebbe fare al caso mio. Grazie!!
Non ne so niente della serializzazione..
Se è questa la strada da seguire credo mi serva di leggere una guida o un tutorial per poter capire come funziona la serializzazione.
Diciamo ho bisogno di un "hallo world" per la serializzazione
__________________
MB:Asus Rog Strix B450-F Gaming - Cpu:AMD Ryzen 5 2600 - RAM:2x8Gb DualCh DDR4-2400MHz Patriot Viper Elite - SkGrafica:msi GeForce GTX 1050Ti 4GB - SSD: 2 x Samsung 970 EVO 1TB nvme M.2 in RAID0 Alim: EVGA B3 750W Case: Corsair airflow 750D
sobrano è offline   Rispondi citando il messaggio o parte di esso
Old 22-11-2019, 12:40   #4
Kaya
Senior Member
 
Iscritto dal: Apr 2005
Messaggi: 3302
La serializzazione però non è il massimo secondo me come soluzione.
Io resterei con il salvataggio su file stile CSV, oppure se proprio su un database (anche qualcosa di semplice tipo sqlite).

Per la serializzazione tipicamente devi estendere o implementare la classe serialize ma dipende dal linguaggio la modalità.
Si, direi che devi studiare
Kaya è offline   Rispondi citando il messaggio o parte di esso
Old 23-11-2019, 09:35   #5
sobrano
Senior Member
 
Iscritto dal: Oct 2004
Messaggi: 903
Salve di nuovo.
ho fatto buoni progressi e mi sento molto vicino all'obiettivo ma ho problemi con la deserializzazione perche si dovrebbe trattare di una deserializzazione complessa, ovvero l'oggetto che voglio ricostruire dal file xml serializzato è un ogetto che contiene variabili dello stato interno e altri oggetti con a loro volta le loro variabili dello stato interno.

Ho un oggetto di tipo 'Tavolo' che contiene alcune variabili ed anche una 'List' di oggetti di tipo 'Articolo' con le sue variabili dello stato interno

public class Tavolo
{
public int coperti;
public DateTime dataCommandaTavolo;
[XmlElement("Articolo")]
public List<Articolo> ListaArticoli = new List<Articolo>();
...
}


public class Articolo
{
public string nome;
public double prezzo;
public string categoria;
public int quantita;
...
}


ecco di seguito il file xml serializzato che a me sembra riuscito bene anche se non vedo traccia della List<Articolo>!:
Codice:
<?xml version="1.0" encoding="UTF-8"?>

- <Tavolo xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     <coperti>2</coperti>
     <dataCommandaTavolo>2019-11-23T09:10:06.202889+01:00</dataCommandaTavolo>
      - <Articolo>
             <nome>Margherita</nome>
             <prezzo>4.5</prezzo>
             <categoria>Pizza</categoria>
             <quantita>1</quantita>
        </Articolo>
      - <Articolo>
             <nome>Carbonara (Pasta)</nome>
             <prezzo>13.5</prezzo>
             <categoria>Pasta</categoria>
             <quantita>1</quantita>
        </Articolo>
   </Tavolo>

il file serializzato mi sembra sia creato bene, pero credo proprio che non faccio bene la deserializzazione. ecco di seguito il codice che ho usato per serializzare prima e deserializzare dopo


codice per serializzare:
Codice:
XmlSerializer xmls = new XmlSerializer(typeof(Tavolo));
using (TextWriter tw = new StreamWriter(Tavolo9.getnometavolo()+".xml")) 
{
     xmls.Serialize(tw, Tavolo9);
}


codice per deserializzare:
Codice:
XmlSerializer xmls = new XmlSerializer(typeof(Tavolo));
using (TextReader tr = new StreamReader(Tavolo9.getnometavolo() + ".xml"))
{                 
   Tavolo9 = (Tavolo)xmls.Deserialize(tr); 
 }


dopo la deserializzazione non mi sembra che venga creato l'oggetto di partenza infatti il resto del programma va in crash
__________________
MB:Asus Rog Strix B450-F Gaming - Cpu:AMD Ryzen 5 2600 - RAM:2x8Gb DualCh DDR4-2400MHz Patriot Viper Elite - SkGrafica:msi GeForce GTX 1050Ti 4GB - SSD: 2 x Samsung 970 EVO 1TB nvme M.2 in RAID0 Alim: EVGA B3 750W Case: Corsair airflow 750D

Ultima modifica di sobrano : 23-11-2019 alle 09:42.
sobrano è offline   Rispondi citando il messaggio o parte di esso
Old 23-11-2019, 12:01   #6
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2794
1. Qual è l'errore che ottieni?
2. Le classi Tavolo e Articolo hanno un costruttore public senza parametri (o nessun costruttore)? Senza questo costruttore non è possibile deserializzare gli oggetti con il metodo che stai usando, questo perché il processo di deserializzazione generalmente consiste nel creare l'oggetto vuoto (con il costruttore senza parametri) e poi nel settare le varie proprietà.
wingman87 è offline   Rispondi citando il messaggio o parte di esso
Old 24-11-2019, 00:09   #7
sobrano
Senior Member
 
Iscritto dal: Oct 2004
Messaggi: 903
ciao Wingman.
le due classi hanno entrambe un costruttore di default vuoto

public Articolo() {}
public Tavolo() {}

l'errore che ottengo si presenta in un altro punto del codice in cui chiamo un oggetto della List di Articoli che pero risulta null invece di contenere un Articolo. Questo deve dipendere dal fatto che la deserializzazione non ha avuto successo e non ha creato correttamente l'oggetto Articolo.
__________________
MB:Asus Rog Strix B450-F Gaming - Cpu:AMD Ryzen 5 2600 - RAM:2x8Gb DualCh DDR4-2400MHz Patriot Viper Elite - SkGrafica:msi GeForce GTX 1050Ti 4GB - SSD: 2 x Samsung 970 EVO 1TB nvme M.2 in RAID0 Alim: EVGA B3 750W Case: Corsair airflow 750D
sobrano è offline   Rispondi citando il messaggio o parte di esso
Old 24-11-2019, 18:52   #8
sobrano
Senior Member
 
Iscritto dal: Oct 2004
Messaggi: 903
ho risolto il problema e vi ringrazio per i consigli.
Scrivo qua quale era il problema perche in effetti per chi sta alle prime armi come me con la deserializzazione potrebbe essere un problema insidioso.

Codice:
//Deserializzazione file xml --> oggetto
XmlSerializer deserializer = new XmlSerializer(typeof(Tavolo));
TextReader reader = new StreamReader(nomefile +".xml");
object obj = deserializer.Deserialize(reader); 
reader.Close();
  
Tavolo Tavolo_temp = new Tavolo(); //creo un cero oggetto di tipo Tavolo temporaneo su cui posso utilizzare i metodi che ho definito nella classe Tavolo 
Tavolo_temp = (Tavolo)obj;
Tavolo9.setcoperti(Tavolo_temp.getcoperti());            
Tavolo9.setdataCommandaTavolo(Tavolo_temp.getdataCommanda());
Tavolo9.setListaArticoli(Tavolo_temp.getListaArticoli());
inizialmente avevo fatto Tavolo9 = (Tavolo)obj
e non funzionava.
Il problema era dovuto al fatto che Tavolo9 non è esattamente uguale al tavolo deserializzato.
Il tavolo deserializzato (Tavolo)obj contiene solo le variabili dello stato interno che ho scelto di deserializzare, che sono solo alcune di quelle necessarie per definire un Tavolo.
Inoltre al tavolo deserializzato (Tavolo)obj non posso applicarci i metodi della classe Tavolo vera e propria.
Per cui ho risolto creando una nuova istanza temporanea di tipo Tavolo, che ho usato per trasferire sul Tavolo finale le referenze ai dati deserializzati.

Spero che ho spiegato in modo comprensibile.

saluti a tutti
__________________
MB:Asus Rog Strix B450-F Gaming - Cpu:AMD Ryzen 5 2600 - RAM:2x8Gb DualCh DDR4-2400MHz Patriot Viper Elite - SkGrafica:msi GeForce GTX 1050Ti 4GB - SSD: 2 x Samsung 970 EVO 1TB nvme M.2 in RAID0 Alim: EVGA B3 750W Case: Corsair airflow 750D

Ultima modifica di sobrano : 24-11-2019 alle 18:55.
sobrano è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Oracle AI World 2026: in Europa prima la sovranità, poi la sicurezza e solo dopo l'IA Oracle AI World 2026: in Europa prima la sovrani...
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale CES Unveiled Milan, l'IA diventa tecnologia fond...
L’ex CEO di Intel Gelsinger punta su una...
Techly, quattro nuovi supporti TV fra mo...
Mass Effect sacrificato per Star Wars: i...
Gemini, addio al copia e incolla per cor...
13 miliardi per un colpo di stato? NVIDI...
L'agente AI Wabi crea mini-app su misura...
Edge è il primo browser a supportare Acc...
L'IA di Firefox ora compila i moduli da ...
Tracking pixel nelle email: cosa cambia ...
La GeForce RTX 5080 da 24 GB potrebbe ar...
Apple mette alle strette OpenAI, la caus...
Xbox ancora in calo: ecco com'è a...
Car of the Year 2027: sette finaliste e ...
Google Beam cambia tutto: arrivano le vi...
Curry Barker, il regista di Obsession, p...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:05.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v