Avatar billede Gyvelvej10 Nybegynder
29. oktober 2011 - 18:38 Der er 5 kommentarer og
1 løsning

XML deserialize & properties

Jeg har deserialize en xml fil med dette element
(Det er en liste over andre elementer)

Nå jeg kører min test på denne unit, dvs. bruger properties normalt, får jeg overført listen til "ce" og kørt metoden "changed" og jeg kan få debuggeren til at stoppe på linierne.

Nå jeg deserialize fra xmlfilen, får jeg listen overført til "ce", men jeg får ikke kørt "changed".
Det er heller ikke muligt for mig at debugge på linierne,
debuggeren stopper ikke.

Bruger deserialize metoden properties, på en mærkelig måde,
eller hvad driller her ?

VH
Jørn


---------------------

        [XmlElement("entry")]
        public List<Entry.CaptainEntry> EntryList
        {
            get
            {
                return ce;
            }

            set
            {
                ce = value;               
                changed();
            }
        }
Avatar billede Syska Mester
29. oktober 2011 - 20:28 #1
Har du lidt mere kode så vi event skal rode lidt med det? Ved reflection kommer man derind ... ved ikke om du eventuelt gør det på en mærkelig måde.

Hvad gør din "changed" metode? Hvis den smider en event, skal du så ikke først kontrollere om værdien har ændret sig?
Avatar billede Gyvelvej10 Nybegynder
29. oktober 2011 - 21:57 #2
Jeg har arbejdet med dette et stykke tid nu.
Er kommet over mine problemer med deserializer af xmlfilen.
Jeg får alle data ind, hvis jeg bruger auto properties.

Alle mine subklasser af logfiler har lister med "entry" data.
Disse entry data har meget til fælles, så her har jeg også en baseklasse og subklasser for hver entry type.
Entry.Entry er base klasse til Entry.CaptainEntry.

Da jeg skal behandle disse entry typer på næsten samme måde, ville jeg gerne at de var samlet i logfile base klassen, i en linket liste.

Jeg ville herfor når deserilizeren oprettede en logfile objekt,
og fik listen af entry ind på "EntryList" set propertien, kalde min metode til at sortere denne liste til linketliste og gemme den i baseklassen.

Det virker fra min test.
Når jeg sender en liste til EntryList, får jeg sorteret denne liste til en linketliste, men ikke når jeg får data fra deserilizeren. Jeg får listen ind på "ce" men får ikke kørt "changed" eller kan break med debuggeren.

Håber det giver et bedre overblik og du kan give mig vink

På forhånd tak

Base klasse for flere typer logfiler
------------------------------------------

public abstract class Logfile 
    {
       
        protected LinkedList<Entry.Entry> _entrylist;
       

        public Logfile()
        {
         
        }

        /// flere proproties og metoder

}

***************************************

En af subklasserne
Her får jeg en liste ind med events.

----------------------

XmlRoot(ElementName = "log", IsNullable = false)]   
    public class Captain :Logfile
    {

        private List<Entry.CaptainEntry> ce;
     
        public Captain()
        {
            ce = new List<Entry.CaptainEntry>();
            _entrylist = new LinkedList<Entry.Entry>();
        }

     
        [XmlElement("entry")]
        public List<Entry.CaptainEntry> EntryList
        {
            get
            {
                return ce;
            }

            set
            {
                ce = value;               
                changed();
            }
        }


        private void changed()
        {
/// Sort the event by time and add to _entrylist

        }
}
Avatar billede Syska Mester
29. oktober 2011 - 22:12 #3
Ahhh, troede din changed var en PropertyChanged event ting :-)

Men er de ikke allerede sorteret når du kommer ind igen?

Og hvis den gør:

EntryList = new List<Entry.CaptainEntry>();
Og derefter Add'er dine items som er blevet deserialised ... så løser det vel intet problem om den hører changed eller ej.

Men du kunne sortere i din "get".

I hvert fald håber jeg på en anden kommer med lidt ekspert viden omkring hvorfor du ikke kommer ind i din Property setter.

mvh
Avatar billede arne_v Ekspert
29. oktober 2011 - 22:33 #4
XML deserialisering skal kalde den setter.
Avatar billede Gyvelvej10 Nybegynder
03. november 2011 - 10:33 #5
Jeg har ændret property fra generic list til et array, her bruger den fint "set" property

Det ser ud til at køre nu, så det er videre med projektet.
Tak for input, smid svar for point.
Avatar billede Syska Mester
03. november 2011 - 15:23 #6
svar
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