[C#] Liste in eine Datei schreiben.

01/08/2014 23:29 dOofkopf!™#1
hey, also mein Titel ist nicht grade aussagekräftigt, aber ich versuch es mal zu erklären. :p

Ich schreibe mir grade ein Programm um mir zu merken wo ich bei welcher Serie
grade bin.
Nun möchte ich diese Informationen ja nicht unbedingt mit mysql in eine Datenbank füllen und auslesen, da es noch ein Freund verwenden will.
Ich habe gedacht ich lass eine datei erstellen wo es dann ausgelesen bzw reingeschrieben wird.
Nur leider fällt mir nicht ein wie ich es anstellen soll, ich weiss zwar wie man Config dateien erstellt bzw ausliest aber ich will ja diesmal mehrer Informationen speichern.

Also im groben und ganzen habe ich mir die Datei so vorgestellt:
##SerieXY
Staffel = XY
LängeSchnitt= XY

Achja und das ganze soll halt in eine liste :D
MfG
01/09/2014 06:37 Schlüsselbein#2
Was spricht gegen sqlite?
01/09/2014 15:50 Mindrex#3
Hier ein Weg von vielen: die Serieninformation zu Json serialisieren.
Wir benutzen hierzu Json.NET, Download: [Only registered and activated users can see links. Click Here To Register...]
Um Json.NET zu benutzen, musst die die im Download enthaltene .dll Datei in deinem Projekt zu den Referenzen hinzufügen.

Zuerst erstellen wir eine Klasse, die die Informationen zu einer Serie enthält.
Diese Klasse kannst du übrigens so strukturieren wie du willst, Json.NET kann auch komplexe Strukturen ohne Probleme serialisieren.

Code:
class SerienInfo {
	public string Name;
	public int Staffel;
	etc...
}
Nehmen wir an, wir haben eine List<SerienInfo>, die mit Informationen gefüllt ist:

Code:
List<SerienInfo> info;
Wir können diese einfach mit Json.NET serialisieren:

Code:
string serienJson = JsonConvert.SerializeObject(Info);
Und dann in eine Datei speichern:

Code:
File.WriteAllText("serien.txt", serienJson);
Um unsere Informationen wieder aus der Datei auszulesen, machen wir folgenden:

Code:
string json = File.ReadAllText("serien.txt");
var serienInfos = JsonConvert.DeserializeObject<List<SerienInfo>>(json);
serienInfos (vom Typen List<SerienInfo>) enthält nun die in der Datei gespeicherten Informationen.
Nun kann man diese wieder im Programm verarbeiten, z.B:

Code:
foreach (var info in List<SerienInfo>)
{
	Console.WriteLine(info.Name + ":");
	Console.WriteLine("Staffel: " + info.Staffel);
	etc...
}
Ich hoffe, ich konnte dir weiterhelfen.
Lass mich es wissen, wenn du noch Hilfe brauchst.
01/09/2014 16:16 dOofkopf!™#4
Quote:
Originally Posted by Mindrex View Post
Hier ein Weg von vielen: die Serieninformation zu Json serialisieren.
Wir benutzen hierzu Json.NET, Download: [Only registered and activated users can see links. Click Here To Register...]
Um Json.NET zu benutzen, musst die die im Download enthaltene .dll Datei in deinem Projekt zu den Referenzen hinzufügen.

Zuerst erstellen wir eine Klasse, die die Informationen zu einer Serie enthält.
Diese Klasse kannst du übrigens so strukturieren wie du willst, Json.NET kann auch komplexe Strukturen ohne Probleme serialisieren.

Code:
class SerienInfo {
	public string Name;
	public int Staffel;
	etc...
}
Nehmen wir an, wir haben eine List<SerienInfo>, die mit Informationen gefüllt ist:

Code:
List<SerienInfo> info;
Wir können diese einfach mit Json.NET serialisieren:

Code:
string serienJson = JsonConvert.SerializeObject(Info);
Und dann in eine Datei speichern:

Code:
File.WriteAllText("serien.txt", serienJson);
Um unsere Informationen wieder aus der Datei auszulesen, machen wir folgenden:

Code:
string json = File.ReadAllText("serien.txt");
var serienInfos = JsonConvert.DeserializeObject<List<SerienInfo>>(json);
serienInfos (vom Typen List<SerienInfo>) enthält nun die in der Datei gespeicherten Informationen.
Nun kann man diese wieder im Programm verarbeiten, z.B:

Code:
foreach (var info in List<SerienInfo>)
{
	Console.WriteLine(info.Name + ":");
	Console.WriteLine("Staffel: " + info.Staffel);
	etc...
}
Ich hoffe, ich konnte dir weiterhelfen.
Lass mich es wissen, wenn du noch Hilfe brauchst.
Okey das habe ich soweit verstanden nur habe ich grad das Problem, dass ich mit dem Index nicht klar komme undzwar will ich einen neuen Eintrag machen zum testen.

Sieht bei mir so aus, bis jetzt hab ich immer nur ausgelesen und nie selbst von 0 geschrieben deswegen ist mir das neu.

Code:
   public void JSonWrite()
        {
            SerienInfo = new List<Serien>();
            SerienInfo[1].Name = " TEST";

            string serienJson = JsonConvert.SerializeObject(SerienInfo);
            File.WriteAllText("test.txt", serienJson);
            
        }
Aber da fehlt ja der Index den hab ich ja bei 1 festgelegt zum testen.
Also kurz und knapp wie füll ich die Liste?

Edit: Habs :D
Code:
  SerienInfo = new List<Serien>();
            Serien item = new Serien
            {
                Name = "test"
            };
            SerienInfo.Add(item);
01/09/2014 16:23 Mindrex#5
Für Listen benutzt man die .Add Methode. Außerdem musst du auch das Serien-Objekt instanziieren:
Code:
public void JSonWrite()
        {
            SerienInfo = new List<Serien>();
            var testSerie = new Serie {
                        Name = "Test"
            };
            
            SerienInfo.Add(testSerie);

            string serienJson = JsonConvert.SerializeObject(SerienInfo);
            File.WriteAllText("test.txt", serienJson);
            
        }
01/09/2014 17:06 dOofkopf!™#6
Wie lade ich die ausgelesenen Serien in die Listbox?
mit Listbox.Items.Add/AddRange ?

Habs erstmal so gemacht:
Code:
 
 var serienInfos = JsonConvert.DeserializeObject<List<Serien>>(json);
            foreach (var item in serienInfos)
            {
                Serienliste.Items.Add(item.Name);
            }
01/09/2014 17:21 Mindrex#7
Quote:
Originally Posted by dOofkopf!™ View Post
Wie lade ich die ausgelesenen Serien in die Listbox?
mit Listbox.Items.Add/AddRange ?

Habs erstmal so gemacht:
Code:
 
 var serienInfos = JsonConvert.DeserializeObject<List<Serien>>(json);
            foreach (var item in serienInfos)
            {
                Serienliste.Items.Add(item.Name);
            }
Du kannst auch direkt das Serien-Objekt in eine Listbox laden, du musst aber in der Klasse "Serie" die .ToString Methode überschreiben, damit die Serie richtig angezeigt wird:

Code:
class Serie
{
    public string Name;
    public int Staffel;
    etc...
    

    public override string ToString()
    {
        return Name + " | Staffel: " + Staffel;
    }
}
01/09/2014 18:13 'Heaven.#8
[Only registered and activated users can see links. Click Here To Register...]