Forum » Programiranje » [C#] Deserializacija
[C#] Deserializacija
Cvenemir ::
Lp.
Pri deserializaciji dobim med izvajanjem programa naslednji Exception:
Unable to cast object of type 'Seznam_Oseb.SeznamOseb' to type 'System.Collections.Generic.List`1[Seznam_Oseb.Oseba]'.
Izpisati želim osebe, ki so shranjene v .bin datoteki.
Koda:
Kje je napaka?
Pri deserializaciji dobim med izvajanjem programa naslednji Exception:
Unable to cast object of type 'Seznam_Oseb.SeznamOseb' to type 'System.Collections.Generic.List`1[Seznam_Oseb.Oseba]'.
Izpisati želim osebe, ki so shranjene v .bin datoteki.
Koda:
public static void Deserializacija() { try { using (Stream stream = File.Open("seznam_oseb.bin", FileMode.Open)) { BinaryFormatter bin = new BinaryFormatter(); var osebeSSeznama = (List<Oseba>)bin.Deserialize(stream); foreach (Oseba oseba in osebeSSeznama) { Console.WriteLine("{0} {1}, davčna številka: {2}", oseba.Ime, oseba.Priimek, oseba.Davcna); } } } catch (IOException) { ; } }
Kje je napaka?
Spura ::
Sej ti tocno pise vrstico in tocno ti pise, da ne more castat Seznam_Oseb.SeznamOseb v List.
darkolord ::
Tkole mogoč:
var osebeSSeznama = (SeznamOseb)bin.Deserialize(stream); foreach (Oseba oseba in osebeSSeznama.osebe) { Console.WriteLine("{0} {1}, davčna številka: {2}", oseba.Ime, oseba.Priimek, oseba.Davcna); }
Cvenemir ::
@detroit: tako je.
@Darkolord: ne gre tako, napiše da OsebeSSeznama ne vsebuje definicije za "osebe"
@Darkolord: ne gre tako, napiše da OsebeSSeznama ne vsebuje definicije za "osebe"
darkolord ::
SeznamOseb je razred, v katerem je deklariran seznam "osebe" tipa List.
napiše da OsebeSSeznama ne vsebuje definicije za "osebe"Kero zdej?
Cvenemir ::
Serializacija:
switch (izbira) { case 1: os = UstvariOsebo(); osebe.DodajOsebo(os); //Shranjevanje seznama na datoteko try { using (Stream stream = File.Open("seznam_oseb.bin", FileMode.Create)) { BinaryFormatter bin = new BinaryFormatter(); bin.Serialize(stream, osebe); } } catch (IOException) { ; } break;
Zgodovina sprememb…
- spremenil: Cvenemir ()
Spura ::
Cvenemir ::
Zato, ker naloga zahteva tako:
Izdelajte konzolno aplikacijo za delo s seznamom oseb.
Primeri uporabe:
dodajanje nove osebe v seznam,
izpis seznama,
brisanje seznama,
iskanje osebe z določeno davčno številko v seznamu.
NEOBVEZNO: shranjevanje seznama na datoteko in nalaganje seznama z datoteke
Izdelajte konzolno aplikacijo za delo s seznamom oseb.
Primeri uporabe:
dodajanje nove osebe v seznam,
izpis seznama,
brisanje seznama,
iskanje osebe z določeno davčno številko v seznamu.
NEOBVEZNO: shranjevanje seznama na datoteko in nalaganje seznama z datoteke
Spura ::
Spet nisi dojel namiga. Ti serializiras objekt tipa Seznam_Oseb.SeznamOseb, in ga potem deserializiras in ga castas v List<Oseba> ki je nekompatibilen tip. A ti moram narisat?
Mesar ::
Kaj noriš Špura? V konstruktor naj naredi... ne pa da ma probleme z nekompatibilnimi tipi, ne komplicirat tam kjer ni potrebe.
Your turn to burn!
gnomee ::
Npr. da imaš razred SeznamOseb in lastnosti tipa string ime, string priimek, int starost preprosto naredi konstruktorja.
Potem pa dodajaš na seznam kot
public SeznamOseb () { ime = ""; priimek = ""; starost = 0; } public SeznamOseb (string imeOsebe, string priimekOsebe, int starostOsebe) { this.ime = imeOsebe; this.priimek = priimekOsebe; this.starost = starostOsebe; }
Potem pa dodajaš na seznam kot
seznamOseb.Add(new SeznamOseb(ime, priimek, starost));
Zgodovina sprememb…
- spremenil: gnomee ()
Cvenemir ::
Za osebo in seznam oseb imam dva ločena razreda. V razredu Oseba, imam vgrajene zgoraj omenjene konstruktorje, medtem ko razred SeznamOseb, vsebuje le metode za manipulacijo seznama. Predlagaš, da razreda združim v enega?
Še kodi razredov:
Še kodi razredov:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Seznam_Oseb { [Serializable()] class Oseba { //Atributi private string ime; private string priimek; private int davcna; //Konstruktor public Oseba(string ime, string priimek, int davcna) { this.ime = ime; this.priimek = priimek; this.davcna = davcna; } public Oseba() { this.ime = ""; this.priimek = ""; this.davcna = 0; } public string Ime { get { return this.ime; } set { this.ime = value; } } public string Priimek { get { return this.priimek; } set { this.priimek = value; } } public int Davcna { get { return this.davcna; } set { this.davcna = value; } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Seznam_Oseb { [Serializable()] class SeznamOseb : Oseba { List<Oseba> osebe = new List<Oseba>(); //Metoda za dodajanje oseb na seznam public void DodajOsebo(Oseba o) { if (o.Ime != "" && o.Priimek != "" && o.Davcna != 0) { osebe.Add(o); } else { Console.WriteLine("Podatki niso popolni!"); } } //Metoda za izpis seznama public void IzpisSeznama() { foreach (Oseba o in osebe) { int i = 1; Console.WriteLine("{0} oseba: {1} {2}, z davčno številko {3}.", i, o.Ime, o.Priimek, o.Davcna); i++; } } //Brisanje celotnega seznama public void BrisanjeSeznama() { osebe.Clear(); if (osebe.Count == 0) { Console.WriteLine("Seznam je bil uspešno izbrisan."); } else { Console.WriteLine("Seznama ni mogoče izbrisati."); } } //Brisanje posamezne osebe z določeno davčno številko public void BrisanjeOsebe(int davcna) { Console.WriteLine("\nVnesite davčno številko osebe, ki jo želite izbrisati: "); davcna = int.Parse(Console.ReadLine()); { foreach (Oseba o in osebe) { if (o.Davcna == davcna) { osebe.Remove(o); Console.WriteLine("Oseba je bila uspešno odstranjena."); break; } else { Console.WriteLine("Osebe z določeno davčno številko ni na seznamu."); break; } } } } //Iskanje osebe z določeno davčno številko v seznamu public bool IskanjeOsebe(int davcna) { Console.WriteLine("Vnesite davčno številko osebe, ki jo želite najti: "); davcna = int.Parse(Console.ReadLine()); foreach (Oseba o in osebe) { if (o.Davcna == davcna) { Console.WriteLine("Oseba je bila najdena. Njeni podatki so: \n{0} {1}, davčna številka: {2}", o.Ime, o.Priimek, o.Davcna); } else { Console.WriteLine("Osebe z določeno davčno številko žal ni na seznamu."); } } return true; } } }
Zgodovina sprememb…
- spremenil: Cvenemir ()
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | c# seminarskaOddelek: Programiranje | 2678 (2351) | tuned |
» | [c#] Ustvarjanje objekta v drugem razreduOddelek: Programiranje | 1666 (1611) | Cvenemir |
» | c sharp LinkedList - NalogaOddelek: Programiranje | 1862 (1813) | Msatir |
» | Povezani seznamOddelek: Programiranje | 2119 (1716) | pohano |
» | [c#] Napačen izpis -- prazni stringiOddelek: Programiranje | 1539 (1481) | Spura |