Forum: PC-Programmierung Serialisierung C#


von Leon E. (adiagi)


Lesenswert?

Hi Leute,

hab mir ne Windows Forms mit verschiedenen Controls gebaut.
Nun will ich, dass ich das Form mit sämtlichen Inhalt der Controls 
speichern kann und beim nächsten mal z.B wieder laden.
Habe es mit Serialize von "JSon" soweit gebracht, dass ich den Inhalt in 
ne Textdatei speichere und beim nächsten aufruf er wieder geladen wird.
Hier Der Code:
1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Windows.Forms;
5
using System.Runtime.Serialization.Formatters.Soap;
6
using System.IO;
7
using Newtonsoft.Json;
8
using Newtonsoft.Json.Linq;
9
10
using System.Net.NetworkInformation;
11
12
namespace WindowsFormsApplication1
13
{
14
    static class Program
15
    {
16
        static Configuration _configuration = new Configuration();
17
18
        const string fileName = @"c:\json.txt";
19
20
        /// <summary>
21
        /// Der Haupteinstiegspunkt für die Anwendung.
22
        /// </summary>
23
        [STAThread]
24
        static void Main()
25
        {
26
27
            //Ping Sender = new Ping();
28
            //PingReply Result = Sender.Send("173.194.59.94");
29
            //if (Result.Status == IPStatus.Success)
30
            //{
31
            //    MessageBox.Show("Erfolg");
32
            //}
33
            //else
34
            //{
35
            //    MessageBox.Show("Fehler");
36
            //}
37
            //string[] s = System.IO.Ports.SerialPort.GetPortNames();
38
            //foreach (string a in s)
39
            //{
40
            //    System.Diagnostics.Debug.Write(a+"\n");
41
            //}
42
            Application.EnableVisualStyles();
43
            Application.SetCompatibleTextRenderingDefault(false);
44
            ConfigurationForm configForm = new ConfigurationForm();
45
            Configuration copyConfig = _configuration.Clone();
46
47
            if (File.Exists(fileName))
48
            {
49
                string serializedConfiguration = string.Empty;
50
                using (var tf = File.OpenText(fileName))
51
                {
52
                    serializedConfiguration = tf.ReadToEnd();
53
                }
54
               copyConfig = Configuration.Deserialize(serializedConfiguration);
55
            }
56
57
            configForm.Configuration = copyConfig;
58
            DialogResult dr = configForm.ShowDialog();
59
            if (dr == DialogResult.OK)
60
            {
61
                _configuration = copyConfig;
62
            }
63
64
            string s = JsonConvert.SerializeObject(copyConfig);
65
            MessageBox.Show(s);
66
67
            
68
            using (var tf = File.CreateText(fileName))
69
            {
70
                tf.
71
                tf.Write(s);
72
            }
73
74
            //object o = JsonConvert.DeserializeObject(s);
75
            //var jo = (JObject)o;
76
77
            //object o2 = JsonConvert.DeserializeObject(s, typeof(Configuration));
78
       
79
            //configForm = new ConfigurationForm();
80
            //configForm.Configuration = (Configuration)o;
81
            //configForm.ShowDialog();
82
        }
83
    }
84
}

nun tut alles schön und gut.
Aber mein Wille ist, dass ich die Konfiguration in eine Textdatei 
speichere und dann beim nächsten öffnen, auswählen kann welche 
eingestellten konfigurationn ich haben will.
also will ich mehrere Konfigurationen speichern.
Mit meinem Code speichert er nur einen und lädt ihn beim nächsten öffnen 
gleich.

Danke für eure Hilfe

Gruß

Agit

von Udo S. (urschmitt)


Lesenswert?

Agit A. schrieb:
> Aber mein Wille ist, dass ich die Konfiguration in eine Textdatei
> speichere und dann beim nächsten öffnen, auswählen kann welche
> eingestellten konfigurationn ich haben will.
Wo ein Wille ist ist auch ein Weg

> also will ich mehrere Konfigurationen speichern.
> Mit meinem Code speichert er nur einen und lädt ihn beim nächsten öffnen
> gleich.
Dann ändere den Code dahin, daß du auswählen kannst in welche Datei er 
die Konfiguration speichert, oder packe alle Controls in ein großes 
Objekt und speichere davon ein ganzes Array ab.
Beim Hochfahren machst du dann eine Selectbox oder wie das heisst und 
wählst aus den vorhandenen Dateien / Initobjekten die für dich passende 
aus.

Was ist jetzt dein eigentliches Problem?

von Leon E. (adiagi)


Lesenswert?

hi Udo,

danke für deine schnelle Antwort.
Ja ich weiß das dürfte nicht allzu schwer sein, aber irgendwie habe ich 
gad einen vor dem Brett.

also ich verkürz den obigen Code mal.
1
            if (File.Exists(fileName))
2
            {
3
                string serializedConfiguration = string.Empty;
4
                using (var tf = File.OpenText(fileName))
5
                {
6
                    serializedConfiguration = tf.ReadToEnd();
7
                }
8
                //serializedConfiguration = read.Get_versions("Parameters", "Saved_Configuration");
9
                copyConfig = Configuration.Deserialize(serializedConfiguration);
10
            }

im obigen Code will ich es so haben, dass er abfragt welche Datei er 
laden soll und nicht einfache eine Textdateil laden.



1
  string s = JsonConvert.SerializeObject(copyConfig);
2
            MessageBox.Show(s);
3
4
            using (var tf = File.CreateText(fileName))
5
            {
6
7
                tf.Write(s);
8
            }

hier will ich dass er eine neue Datei anlegt falls ich es will und nicht 
einfach die Datei überschreiben.

Vielen Dank

Gruß

Agit

von __tom (Gast)


Lesenswert?

Agit A. schrieb:
> im obigen Code will ich es so haben, dass er abfragt welche Datei er
> laden soll und nicht einfache eine Textdateil laden.

http://msdn.microsoft.com/en-us/library/system.windows.forms.openfiledialog.aspx



Agit A. schrieb:
> hier will ich dass er eine neue Datei anlegt falls ich es will und nicht
> einfach die Datei überschreiben.

http://msdn.microsoft.com/en-us/library/system.windows.forms.savefiledialog.aspx

von Leon E. (adiagi)


Lesenswert?

HI,

ich bin nich in Windows Forms,
sondern im Main, da kann ich nicht mir OpenFileDialog rummachen.

Gruß

Agit

von Arc N. (arc)


Lesenswert?

Agit A. schrieb:
> HI,
>
> ich bin nich in Windows Forms,
> sondern im Main, da kann ich nicht mir OpenFileDialog rummachen.

OpenFileDialog oder ShowDialog macht keinen Unterschied, beides 
blockiert bis der Dialog geschlossen wird. Ansonsten entsprechende 
Möglichkeiten in der ConfigurationForm vorsehen.

von __tom (Gast)


Lesenswert?

Agit A. schrieb:
> ich bin nich in Windows Forms,
> sondern im Main, da kann ich nicht mir OpenFileDialog rummachen.

ah, das hatte ich nicht gesehen, um gui elemente verwenden zu können 
muss die message pump laufen. oder um es kurz zu machen: direkt im 
main() kann man keine fenster verwenden (wenn man keine klimmzüge 
macht).

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.