Avatar billede baitianlong Nybegynder
26. april 2005 - 19:41 Der er 11 kommentarer og
2 løsninger

lidt mere xml

Med hjælp fra arne_v i forgårs og 9-10 smukke kodelinier, lykkedes det mig at gemme min AftaleBog i en xml fil. Nu er jeg blevet xml freak og derfor skal diverse settings fra mit lille program gemmes. F.eks sprog. Man kan vælge tre sprog, og jeg vil gemme det, så den starter op på det rigtige.

Sproget er en int fra 1-3, og KalenderSettíngs ser sådan her ud:

namespace Calendar
{
  public class KalenderSettings
  {
    public int setsprog;
       
    public KalenderSettings()
    {
        setsprog = 0;
    }
        public int Setsprog
        {
        get
        {
        return setsprog;
        }
        set
        {
        setsprog = value;
        }
    }
  }
}

Den skriver fint nok i Xml filen, hvor der så står:

<?xml version="1.0" encoding="utf-8"?>
<KalenderSettings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <setsprog>3</setsprog>
  <Setsprog>3</Setsprog>
</KalenderSettings>

Her er min Main metode:

public static void Main()
{
    KalenderSettings kset = new KalenderSettings();
    AftaleBog abog = new AftaleBog();
    StreamReader sr;
    XmlSerializer ser = new XmlSerializer(typeof (Calendar.AftaleBog));
    StreamReader sr1;
    XmlSerializer ser1 = new XmlSerializer(typeof (Calendar.KalenderSettings));
    try
    {
        sr = new StreamReader("c:\\aftalebog.xml");
        abog = (Calendar.AftaleBog) ser.Deserialize(sr);
        sr.Close();
        sr1 = new StreamReader("c:\\aftaleset.xml");
        kset = (Calendar.KalenderSettings) ser.Deserialize(sr1);
        sr1.Close();
        Console.Write(kset.Setsprog);
    }
    catch (Exception e)
    {
            //Do nothing
    }
    Application.Run(new KalenderForm(abog, kset));
}

...Beklager alle metoderne :)

Jeg har Xml included KalenderSettings i min KalenderForm (med main metoden) :) Hvorfor sætter den ikke sproget når programmet starter ?
Avatar billede arne_v Ekspert
26. april 2005 - 19:48 #1
Ikke dit problem, men hvis du laver setsprog field'et private så undgår du dobbelt
forekomst
Avatar billede arne_v Ekspert
26. april 2005 - 19:49 #2
Hvad sker der ? Bliver kset.Setsprog ikke sat til 3 ?
Avatar billede baitianlong Nybegynder
26. april 2005 - 19:50 #3
Min Console.Write skriver ingenting
Avatar billede arne_v Ekspert
26. april 2005 - 19:53 #4
Hvis det er en Windows app så har du vel ikke et sort vindue at udskrive i ??

Prøv evt. med:

MessageBox.Show("kset.Setsprog=" + kset.Setsprog);
Avatar billede baitianlong Nybegynder
26. april 2005 - 19:53 #5
Her er constructoren:

public KalenderForm(AftaleBog abog, KalenderSettings kset)
{
    this.abog = abog;
    this.kset = kset;
    dato = new DateTime();
    InitializeComponent();
    monthCalendar1_DateChanged(null, null);
    SetLanguage();
}
Avatar billede baitianlong Nybegynder
26. april 2005 - 19:59 #6
Med Console output på en windows app kan man godt console.write samtidig med at vinduerne er der. Jeg prøvede med:

public static void Main()
        {
            KalenderSettings kset = new KalenderSettings();
            AftaleBog abog = new AftaleBog();
            StreamReader sr;
            XmlSerializer ser = new XmlSerializer(typeof (Calendar.AftaleBog));
            StreamReader sr1;
            XmlSerializer ser1 = new XmlSerializer(typeof (Calendar.KalenderSettings));
            try
            {
                sr = new StreamReader("c:\\aftalebog.xml");
                abog = (Calendar.AftaleBog) ser.Deserialize(sr);
                sr.Close();
                sr1 = new StreamReader("c:\\aftaleset.xml");
                kset = (Calendar.KalenderSettings) ser.Deserialize(sr1);
                sr1.Close();
                Console.Write("kset.Setsprog=" + kset.Setsprog);
            }
            catch (Exception e)
            {
                Console.Write("Æv");
                //Do nothing
            }
            Application.Run(new KalenderForm(abog, kset));
        }

og den skrev "æv". Så den kan ikke læse, men godt skrive.
Avatar billede arne_v Ekspert
26. april 2005 - 20:02 #7
prøv lige:

catch (Exception e)
            {
                Console.Write("Æv : " + e.ToString());
            }
Avatar billede baitianlong Nybegynder
26. april 2005 - 20:04 #8
Her er "e" (min exception)

ÆvSystem.InvalidOperationException: There is an error in XML document (2, 2). --
-> System.InvalidOperationException: <KalenderSettings xmlns=''> was not expecte
d.
  at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReader1.Read
5_AftaleBog()
  --- End of inner exception stack trace ---
  at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, St
ring encodingStyle, XmlDeserializationEvents events)
  at System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, Xm
lDeserializationEvents events)
  at System.Xml.Serialization.XmlSerializer.Deserialize(TextReader textReader)
  at Calendar.KalenderForm.Main() in c:\documents and settings\jesper\my docume
nts\visual studio projects\calendar\kalenderform.cs:line 317Press any key to con
tinue
Avatar billede baitianlong Nybegynder
26. april 2005 - 20:05 #9
Det her er 317:

kset = (Calendar.KalenderSettings) ser.Deserialize(sr1);
Avatar billede baitianlong Nybegynder
26. april 2005 - 20:12 #10
Det er simpelthen den linie, der ikke er smuk. Jeg prøvede at udkommentere den og så skriver console: kset.Setsprog = 0

Indholdet i AftaleBogen gemmes og hentes fint nok.
Avatar billede baitianlong Nybegynder
26. april 2005 - 20:14 #11
øhhh ja
og derfor kan man jo udlede at det skal være ser1 :))

kset = (Calendar.KalenderSettings) ser1.Deserialize(sr1);

En lille forglemmelse i copy/paste :S
Avatar billede baitianlong Nybegynder
26. april 2005 - 20:16 #12
hvis du smider et svar for debugging kan du få lidt points for den altid sprøde hjælp. Jeg havde overset en dum detalje. :)
Avatar billede arne_v Ekspert
26. april 2005 - 20:28 #13
:-)
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