Avatar billede mikkel_sommer Nybegynder
20. oktober 2005 - 02:34 Der er 13 kommentarer og
1 løsning

Fejl ved skrivning af objekt til fil

Jeg er ved at lave et program til administration af videofilm og har i den forbindelse brug for at skrive filmlisten til en fil.

Mine film ligger i en ArrayList og jeg forsøger at skrive den ud til en fil med følgende kode:

string basefolder = Environment.CurrentDirectory;
string data = basefolder + "\\Data";

public void gemFilm(ArrayList film)
{
    file = data + "\\Film.filmdata";
    FileStream outFile = File.Create(file);
    bf.Serialize(outFile, film);
    outFile.Close();
}

Når jeg kalder gemFilm metoden får jeg følgende fejl:

An unhandled exception of type 'System.Runtime.Serialization.SerializationException' occurred in mscorlib.dll

Additional information: Typen System.Runtime.Serialization.Formatters.Binary.BinaryFormatter i assemblyen mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 er ikke markeret til serialisering.

Håber der er en som kan hjælpe.
Avatar billede arne_v Ekspert
20. oktober 2005 - 09:14 #1
Den påstår at du har puttet bf ind i film !?

(hvilket du ikke skal)
Avatar billede mikkel_sommer Nybegynder
20. oktober 2005 - 20:02 #2
Det forstår jeg ikke?
Her er de metoder jeg bruger til at hente og gemme film listen:

public ArrayList hentFilm()
{
    ArrayList film = new ArrayList();
    file = data + "\\Film.filmdata";
    try
    {
        FileStream inFile = File.OpenRead(file);
        film = (ArrayList)bf.Deserialize(inFile);
        inFile.Close();
        film.Sort();
        return film;
    }
    catch(SystemException)
    {
        return new ArrayList();
    }
}

public void gemFilm(ArrayList filmListe)
{
    file = data + "\\Film.filmdata";
    FileStream outFile = File.Create(file);
    bf.Serialize(outFile, filmListe);
    outFile.Close();
}

Og her er den kode som i formen kalder dem:

Film film = new Film(titel, instruktør, genre, alder, spilletid,
    ejer, oprettelsesdato, skuespillere);
ArrayList filmListe = (ArrayList)gh.hentFilm();
filmListe.Add(film);
gh.gemFilm(filmListe);

PS. Det virker både med genre og brugere som jeg håndterer på præcis samme måde
Avatar billede arne_v Ekspert
20. oktober 2005 - 20:06 #3
Film er markeret som [Serializable] ?
Avatar billede mikkel_sommer Nybegynder
20. oktober 2005 - 22:49 #4
Ja det er den...
Avatar billede arne_v Ekspert
20. oktober 2005 - 22:59 #5
suk

kan du poste et komplet køreklart eksempel som viser problemet ?
Avatar billede mikkel_sommer Nybegynder
20. oktober 2005 - 23:05 #6
Hvad mener du? maile projektet til dig?
Avatar billede arne_v Ekspert
20. oktober 2005 - 23:07 #7
poste det her eller maile det

men meget gerne i en "minimum to recreate" udgave
Avatar billede mikkel_sommer Nybegynder
20. oktober 2005 - 23:14 #8
Hvordan poster jeg her? eller hvad er din mail adresse?
Det består jo af et par klasser, men for det her problem er det kun film klassen(Film) og formen(OpretFilm) og den klasse hvor gem og hent metoderne ligger i (GemHent) som er relevante. Dog er kørslen af programmet afhængigt af nogle af de andre. Men jeg kan sagtens angive i hvilke linier det forskellige ligger som du har brug for at se. OpretFilm 592 - 596, GemHent 32 - 56
Avatar billede arne_v Ekspert
20. oktober 2005 - 23:18 #9
bare koden - jeg bruger ikke Visual Studio, så jeg kan ikke bruge projektet
til noget alligevel

men hvis det er nemmere at emaile det så er min email adresse arne_v@mail.danbbs.dk

[og jeg skal nok poste det relevante her]
Avatar billede arne_v Ekspert
20. oktober 2005 - 23:44 #10
public class Film
    {
        private string titel;
        private string instruktør;
        private string genre;
        private string alder;
        private int spilletid;
        private string ejer;
        private DateTime oprettelsesDato;
        private string status;
        private ArrayList skuespillere;
        GemHent gh = new GemHent(); // <-------------------------------------
Avatar billede arne_v Ekspert
20. oktober 2005 - 23:45 #11
Film indeholder en GemHent

GemHent er ikke serializable

derfor ...
Avatar billede mikkel_sommer Nybegynder
20. oktober 2005 - 23:57 #12
Du har ret, det virker når jeg fjerner den (bruger den alligevel ikke længere der), men, igen, bare af nysgerrighed burde det ikke virke hvis jeg gør GemHent klassen Serializable? (Det gør det nemlig ikke)

Når du svar på dette så gør det med et "svar" så får du dine points med det samme
Avatar billede arne_v Ekspert
20. oktober 2005 - 23:58 #13
svar
Avatar billede arne_v Ekspert
20. oktober 2005 - 23:59 #14
GemHent indeholder en BinaryFormatter og den er nok ikke serializable
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester