Entwickler-Ecke

IO, XML und Registry - Serialization


metrix - Do 24.04.08 22:36
Titel: Serialization
Hallo,

ich bin sehr neu in der Sprache C# aber nicht was Programmierung an sich angeht.
Ich versteh die grundlegenden Sachen, jedoch ist mir der ganze Syntax von C# einfach noch nicht schlüssig.

Kann mir jemand bei diesem Problem helfen?

Zitat:
Error beim Compilen:

Fehler 1 Die Variable des statischen Typs "System.IO.File" kann nicht deklariert werden. C:\Users\martell\AppData\Local\Temporary Projects\ConsoleApplication1\Program.cs 23 17 ConsoleApplication1

Fehler 2 Es kann keine Instanz der statischen System.IO.File-Klasse erstellt werden. C:\Users\martell\AppData\Local\Temporary Projects\ConsoleApplication1\Program.cs 23 24 ConsoleApplication1

Fehler 3 Keine Überladung für die Open-Methode nimmt 1 Argumente an. C:\Users\martell\AppData\Local\Temporary Projects\ConsoleApplication1\Program.cs 24 26 ConsoleApplication1

Fehler 4 Die Variable des statischen Typs "System.IO.File" kann nicht deklariert werden. C:\Users\martell\AppData\Local\Temporary Projects\ConsoleApplication1\Program.cs 33 17 ConsoleApplication1

Fehler 5 Es kann keine Instanz der statischen System.IO.File-Klasse erstellt werden. C:\Users\martell\AppData\Local\Temporary Projects\ConsoleApplication1\Program.cs 33 24 ConsoleApplication1

Fehler 6 Keine Überladung für die Open-Methode nimmt 1 Argumente an. C:\Users\martell\AppData\Local\Temporary Projects\ConsoleApplication1\Program.cs 34 26 ConsoleApplication1




C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
# using System;
 using System.IO;
 using System.Runtime.Serialization;
 using System.Runtime.Serialization.Formatters.Binary;
 using System.Collections.Generic;
 using System.Text;
  
 namespace ConsoleApplication1
 {
     class Program
     {
         static void Main(string[] args)
         {
             Serial st = new Serial();
             st.SerializeNow();
             st.DeSerializeNow();
         }
         public class Serial
         {
             public void SerializeNow()
             {
                 ClassToSerialize c=new ClassToSerialize();
                 File f=new File("temp.dat");
                 Stream s=f.Open(FileMode.Create);
                 BinaryFormatter b=new BinaryFormatter();
                 b.Serialize(s,c);
                 s.Close();
             }
  
             public void DeSerializeNow()
             {
                 ClassToSerialize c=new ClassToSerialize();
                 File f=new File("temp.dat");
                 Stream s=f.Open(FileMode.Open);
                 BinaryFormatter b=new BinaryFormatter();
                 c=(ClassToSerialize)b.Deserialize(s);
                 Console.WriteLine(c.name);
                 s.Close();
             }
         }
         public class ClassToSerialize
         {
             public int age=100;
             public string name="bipin";
         }
     }
 }



Moderiert von user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am Fr 25.04.2008 um 00:49


Christian S. - Fr 25.04.08 00:43

Hallo!

Die Klasse File ist eine statische Klasse, daher kannst Du keine Instanz von ihr erstellen. Sie stellt nur Methoden bereit, die aber alle direkt über die Klasse (den Klassennamen) aufgerufen werden.

Um einen FileStream zu erhalten, kannst Du die ebenfalls statische Methode File.Create zum Erzeugen einer neuen Datei bzw. File.Open oder File.OpenRead zum öffnen einer bestehenden Datei (bei OpenRead nur zum Lesen).

Dein Quelltext wird dadurch eigentlich noch kürzer. Ich würde übrigens möglichst mit dem using-Statement arbeiten, weil Du dann direkt auch einen Resourcenschutz mit drin hast:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
             public void SerializeNow()
             {
                 ClassToSerialize c=new ClassToSerialize();
                 BinaryFormatter b=new BinaryFormatter();
                 using(Stream s = File.Create("temp.dat"))
                     b.Serialize(s,c);
             }
  
             public void DeSerializeNow()
             {
                 ClassToSerialize c=new ClassToSerialize();
                 BinaryFormatter b=new BinaryFormatter();
                 using(Stream s = File.OpenRead("temp.dat"))
                      c=(ClassToSerialize)b.Deserialize(s);
                
                 Console.WriteLine(c.name);
             }


Achte auch drauf, dass die Angabe eines Dateinamens ohne Pfad schief gehen kann.

Grüße
Christian