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 | 2998 (2671) | tuned |
| » | [c#] Ustvarjanje objekta v drugem razreduOddelek: Programiranje | 1774 (1719) | Cvenemir |
| » | c sharp LinkedList - NalogaOddelek: Programiranje | 2088 (2039) | Msatir |
| » | Povezani seznamOddelek: Programiranje | 2273 (1870) | pohano |
| » | [c#] Napačen izpis -- prazni stringiOddelek: Programiranje | 1673 (1615) | Spura |