Avatar billede racerrqv Praktikant
30. januar 2008 - 14:31 Der er 11 kommentarer

XML i Windows Mobile

Hej

Jeg sidder og leger med .net CF og vil til at serialiser en fil, jeg benytter XMLserialization.
Problemet ligger i at jeg kan ikke serialiser en liste, hvor der er over 250 elementer i, men hvis den er mindre end 250, kører det uden problemer.

Nogen der har oplevet samme problem, og findes der evt. en løsning til dette??

Racerrqv
Avatar billede powerpunk Nybegynder
30. januar 2008 - 14:45 #1
Det lyder lidt sært...

Hvad sker der når du forsøger?

Kan du serialisere dine elementer i mindre blokke?
Avatar billede racerrqv Praktikant
30. januar 2008 - 15:02 #2
Det hele skulle gerne serialiseres i en fil, da den senere skal bruges til at søge igennem.
Hvis jeg kører programmet på min pc virker det fint, og den serialiser alle elementerne. Jeg kan derefter så flytte filen til telefon, og her kan den godt læse filen. Så jeg ved ikke helt, hvad problemet er.
Ved ikke om telefonen ikke kan lave filer af den størrelse, eller om den timer ud, når den prøver..
Avatar billede powerpunk Nybegynder
30. januar 2008 - 15:17 #3
Men hvilken fejl får du når du prøver?

Kan du give et eksempel på noget kode, der fejler?
Avatar billede racerrqv Praktikant
30. januar 2008 - 15:27 #4
Ja kan du tro.. Men den siger nok ikke så meget..
"En fejlmeddelelse kan ikke vises, fordi en valgfri ressourcesamling, der indeholder fejlmeddelelsen, ikke blev fundet ---> System.InvalidCastException: InvalidCastException"

Men et stykke kode:

Først serialiseringen.

public bool Serialize(string filename, Subfolder folder, object o)
        {
            bool success = true;

            try
            {
                //Fjerner ulovlige chars fra filnavnet
                foreach (char chr in Path.GetInvalidPathChars())
                {
                    filename = filename.Replace(chr.ToString(), "");
                }
                //Andre ulovlige chars (fra Windows) fra filnavnet
                char[] moreInvalidChars = new char[] { '\\', '/', ':', '*', '?', '"', '<', '>', '|' };
                foreach (char chr in moreInvalidChars)
                {
                    filename = filename.Replace(chr.ToString(), "");
                }


                //Find den komplette sti til filen og vær sikker på at den ender på .xml
                string relativepath = Path.Combine(GetSubfolder(folder), filename);
                string fullpath = Path.Combine(CurrentDirectory, relativepath);
                if (!fullpath.EndsWith(".xml"))
                {
                    fullpath += ".xml";
                }

                //Åben filen (eller opret den) med skriverettigheder
                Stream stream = File.OpenWrite(fullpath);
                XmlSerializer xs = new XmlSerializer(o.GetType());

                //Skriv til objektet
                xs.Serialize(stream, o);

                //Og luk filen
                stream.Close();
            }
            catch (Exception ex)
            {
                StoreEx(ex.ToString());
                success = false;
            }

            return success;
        }

Anden metoden der kaldes fra gui:

Project project = new Project();
            project.Description = "*";
            project.PSPNumber = "";
            WBS w = Main.Manager.LoadWBS();
            IList<Project> list;

            try
            {
                System.Windows.Forms.Cursor.Current = Cursors.WaitCursor;

                list = Main.Manager.SearchPSP(project, Main.User);

                System.Windows.Forms.Cursor.Current = Cursors.Default;
            }
            catch (Exception)
            {
                MessageBox.Show("Der skete en fejl under søgningen.", "Søgning", MessageBoxButtons.OK, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1);
                return;
            }
            if (list != null)
            {
                int count = 0;
                foreach (Project p in list)
                {
                    if (count < 1000)
                    {
                        w.Add(p);
                    }
                    count++;
                }
                //Stores the elements on the phone
                bool opret = false;
                opret = Main.Manager.StoreWBS(w);
                MessageBox.Show(opret.ToString());
            }

Men ved ikke om man kan sige det fejler, når det virker på Pc men ikke Telefon
Avatar billede powerpunk Nybegynder
30. januar 2008 - 15:47 #5
>>Ja kan du tro.. Men den siger nok ikke så meget..
>>"En fejlmeddelelse kan ikke vises, fordi en valgfri ressourcesamling, der
>>indeholder fejlmeddelelsen, ikke blev fundet ---> System.InvalidCastException:
>>InvalidCastException"

Jo! det siger da vældig meget!
Du forsøger et eller andet sted i koden at caste en variabel til en ugyldig type. At fejlbeskeden mangler skyldes at der ikke findes nogen resource-fil med fejlmeddelelser på devicen - men det er noget andet.

Der må stå i exceptionen hvor fejlen sker (StackTrace, funktion, kodelinie...)
Avatar billede powerpunk Nybegynder
30. januar 2008 - 15:52 #6
(For at få 'rigtige' fejlmeddelelser på kan du finde en fil der hedder SR_ENU.cab på din pc, overføre den til devicen og eksekvere den dér)
Avatar billede racerrqv Praktikant
30. januar 2008 - 16:06 #7
Ja det er en InvalidCastException, men hvorfor skulle det så virke på pc? Og hvis jeg benytter mindre elementer i min list (>250)?

Ang. SR_ENU.cab, ved du helt præcis hvor den findes??
Avatar billede powerpunk Nybegynder
30. januar 2008 - 16:16 #8
>>Ja det er en InvalidCastException, men hvorfor skulle det så virke på pc?
>>Og hvis jeg benytter mindre elementer i min list (>250)?

Godt spørgsmål. Det er også derfor det kunne være interessant at se en stack trace fra den exception så vi kan finde ud af præcis hvilket kald der fejler...

Filen hedder System_SR_ENU.cab (min fejl) og skulle vist gerne ligge i roden af din device, hvis du har deployet på den.
Avatar billede racerrqv Praktikant
30. januar 2008 - 16:26 #9
Okay jeg vil prøve at kigge på det, men bliver nok først senere på ugen, men du skal i hvert fald have tak indtil videre, skal nok prøve at smide Tracen herind, når jeg engang finder den :)
Håber du derefter vil hjælpe mig igennem
Avatar billede powerpunk Nybegynder
30. januar 2008 - 16:26 #10
helt i orden
Avatar billede powerpunk Nybegynder
19. februar 2008 - 08:22 #11
Er du kommet videre?
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
Kurser inden for grundlæggende programmering

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