Forum » Programiranje » [C#] Deserializacija
[C#] Deserializacija

Cvenemir ::
Pri deserializaciji z naslednjo metodo mi vrže exception 
Unable to cast object of type 'System.Collections.Generic.List`1[primerjava_objektov.Oseba]' to type 'primerjava_objektov.Oseba'.
 
Že pri prejšnji nalogi sem imel isto težavo, pa nisem pogruntal rešitve. Kaj je narobe?
 
  
Unable to cast object of type 'System.Collections.Generic.List`1[primerjava_objektov.Oseba]' to type 'primerjava_objektov.Oseba'.
Že pri prejšnji nalogi sem imel isto težavo, pa nisem pogruntal rešitve. Kaj je narobe?
public static void UvoziIzDatoteke(List<Oseba> osebe)
        {
            Oseba os = new Oseba();
            var stream = File.Open("Osebe.bin", FileMode.Open);
            var bformatter = new BinaryFormatter();
            Console.WriteLine("...Berem podatke o osebah...");
            os = (Oseba)bformatter.Deserialize(stream);
           
            while (stream.Length > stream.Position)
            {
                Console.WriteLine("{0} {1} {2} {3}", os.Ime, os.Priimek, os.DatumRojstva, os.Naslov);
            }
            stream.Close();
        } 
joze67 ::
Naj ugibam - serializiral si List<Oseba>, deserializiraš pa v Oseba. Skratka, odgovor na tvoje vprašanje leži v void IzvoziVDatoteko().
 
Kako pa se v zanki stream.Position spremeni?
Kako pa se v zanki stream.Position spremeni?

Cvenemir ::
Sem spremenil obe metodi, exceptiona ni več. Kako bi preveril če deserializacija uspe? Vzporedno dodajam še na drug seznam? npr. osebe_test, in ga na koncu izpišem?  
//Metoda za izvoz podatkov v datoteko na disku
        public static void IzvoziVDatoteko(List<Oseba> osebe)
        {
            FileStream tokPisanje = new FileStream("Osebe.bin", FileMode.Create);
            BinaryFormatter dvojiskiOblikovalnik = new BinaryFormatter();
            foreach (Oseba os in osebe)
            {
                dvojiskiOblikovalnik.Serialize(tokPisanje, os);
            }
            tokPisanje.Close();
        }
        //Metoda za uvoz podatkov iz datoteke
        public static void UvoziIzDatoteke(List<Oseba> osebe)
        {
            Oseba os = new Oseba();
            FileStream tokBranje = new FileStream("Osebe.bin", FileMode.Open);
            BinaryFormatter dvojiskiOblikovalnik = new BinaryFormatter();
            while(tokBranje.Length>tokBranje.Position)
            {
                osebe.Add((Oseba)dvojiskiOblikovalnik.Deserialize(tokBranje));
                Console.WriteLine("{0} {1} {2} {3}", os.Ime, os.Priimek, os.DatumRojstva, os.Naslov);
            }
            tokBranje.Close();
        } Vredno ogleda ...
| Tema | Ogledi | Zadnje sporočilo | |
|---|---|---|---|
| Tema | Ogledi | Zadnje sporočilo | |
| » | [C#] DeserializacijaOddelek: Programiranje | 2049 (1652) | Cvenemir | 
| » | branje iz datoteke c#Oddelek: Programiranje | 1761 (1490) | darkolord | 
| » | [c] Enaki datotekiOddelek: Programiranje | 1150 (1010) | Spura | 
| » | C# FailOddelek: Programiranje | 1394 (1043) | nuclear | 
| » | VC# Zapis podatkov na diskOddelek: Programiranje | 2644 (1900) | matej_jack |