» »

[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?

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?

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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C#] Deserializacija

Oddelek: Programiranje
181860 (1463) Cvenemir
»

branje iz datoteke c#

Oddelek: Programiranje
141642 (1371) darkolord
»

[c] Enaki datoteki

Oddelek: Programiranje
71033 (893) Spura
»

C# Fail

Oddelek: Programiranje
121287 (936) nuclear
»

VC# Zapis podatkov na disk

Oddelek: Programiranje
422505 (1761) matej_jack

Več podobnih tem