Plaats nieuw bericht   Plaats Reactie
Vorige onderwerp Printervriendelijke versie Log in om je privé berichten te bekijken Volgende onderwerp
Auteur Bericht
dierreOffline
Onderwerp: XML Serialization  BerichtGeplaatst: 02 feb 2010 - 12:14
In de startblokken


Geregistreerd op: 13-mrt-2006
Berichten: 83

Status: Offline
ik ben aan het uitzoeken hoe xml serialization werkt en hoe ik het moet gebruiken.

Ik heb al een en ander gevonden en ook al een klein werkend "iets" kunnen schrijven.

Nu kom ik echter tot de constatie dat je enkel public attributen kan serializen... Klopt dit? Is het juist dat je geen private attributen kan serializen? Want dit lijkt me toch niet echt een gebruikelijke manier om al de class attributen op public te plaatsen...

een tweede puntje waar ik nu meteen uitgeraakt is hoe ik List<> attribuut kan serializen.

vb in een klasse Persoon heb ik een attribuut boekenlijst. Deze lijst bevat objecten van het type Boek. Als ik de inhoud van de klasse Persoon serialize krijg ik een fout op de lijst van Boek objecten.

Dit is de code die ik gebruik om te serializen
Visual Basic code:

public void serializeToXml(Season applicationData)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(Season));
            TextWriter textWriter = new StreamWriter("seasonData.xml");
            serializer.Serialize(textWriter, applicationData);
            textWriter.Close();
        }


Kan iemand me helpen of meer info geven?

thx
Dieter
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
VozzieOffline
Onderwerp: Re: XML Serialization  BerichtGeplaatst: 04 feb 2010 - 18:20
Moderator


Geregistreerd op: 11-mei-2009
Berichten: 937

Status: Offline
Hallo,

Quote:
Nu kom ik echter tot de constatie dat je enkel public attributen kan serializen... Klopt dit?


Standaard wel. Je kan hier rond door zelf de serialization logica te schrijven. (IXmlSerializable) Sources,
- http://msdn.microsoft.com/en-us/library/ms950721.aspx
- http://stackoverflow.com/questions/6795 ... on-gotchas

Quote:
een tweede puntje waar ik nu meteen uitgeraakt is hoe ik List<> attribuut kan serializen.

Heb zelf nog geen xml serialization gedaan, dus no idea Smile.

(wel al xml serialization voor SOAP. Maar dat ging allemaal automatisch,... dmv wsdl)

Groeten

_________________
con\con

Stappen, keuzes en herhaling combineren is programmeren.
 
 Bekijk gebruikers profiel Stuur privé bericht Bekijk de homepage  
Reageer met quote Naar boven
dierreOffline
Onderwerp: Re: XML Serialization  BerichtGeplaatst: 04 feb 2010 - 22:19
In de startblokken


Geregistreerd op: 13-mrt-2006
Berichten: 83

Status: Offline
De class die ik eigenlijk wens te serializen naar XML bevat de volgende attributen:


    String seizoen
    String categorie
    String aantalSpelers
    List<Player> spelersLijst
    List<Game> wedstrijdLijst


Normaal, en zoals het in feite hoort, plaats ik al mijn attributen 'private'. Voor elk attribuut heb ik de nodige getters en setters geschreven.
Wanneer ik de twee Lists niet wil serializen lukt het mij. Attributen moeten wel public gedeclareerd zijn. Maar wanneer ik ook nog een lijst in mijn XML wil krijgen loopt het niet meer.

Heeft iemand een idee hoe ik ervoor kan zorgen dat zowel mijn String als List< > attributen in mijn XML-bestand worden geplaatst?
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
VozzieOffline
Onderwerp: Re: XML Serialization  BerichtGeplaatst: 04 feb 2010 - 23:18
Moderator


Geregistreerd op: 11-mei-2009
Berichten: 937

Status: Offline
Hallo,

Dit is gebaseerd op zoals ik het deed voor SOAP. (ik heb geen getters/setters gebruikt voor het gemak)
Code:
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            SomeData data = new SomeData();
            data.SomeText = "hello";
            List<SomeObject> objects = new List<SomeObject>();
            for (int i = 1; i <= 10; i++)
            {
                SomeObject item = new SomeObject();
                item.SomeNumber = i;
                objects.Add(item);
            }
            data.SomeObjectArray = objects.ToArray();

            XmlSerializer serializer = new XmlSerializer(typeof(SomeData));
            TextWriter textWriter = new StreamWriter("C:\\seasonData.xml");
            serializer.Serialize(textWriter, data);
            textWriter.Close();

        }
    }


    [Serializable()]
    public class SomeObject
    {
        public int SomeNumber;
    }
   
    [Serializable()]
    public class SomeData
    {
        public String SomeText;
        public SomeObject[] SomeObjectArray;
    }
}


Update 1: En met een List gaat het blijkbaar ook,...
Code:
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            SomeData data = new SomeData();
            data.SomeText = "hello";
            data.SomeObjectList = new List<SomeObject>();
            for (int i = 1; i <= 10; i++)
            {
                SomeObject item = new SomeObject();
                item.SomeNumber = i;
                data.SomeObjectList.Add(item);
            }
            XmlSerializer serializer = new XmlSerializer(typeof(SomeData));
            TextWriter textWriter = new StreamWriter("C:\\seasonData.xml");
            serializer.Serialize(textWriter, data);
            textWriter.Close();

        }
    }


    [Serializable()]
    public class SomeObject
    {
        public int SomeNumber;
    }
   
    [Serializable()]
    public class SomeData
    {
        public String SomeText;
        public List<SomeObject> SomeObjectList;
    }
}


Update 2: En de versie met getters/setters...
Code:
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            SomeData data = new SomeData();
            data.SomeText = "hello";
            data.SomeObjectList = new List<SomeObject>();
            for (int i = 1; i <= 10; i++)
            {
                SomeObject item = new SomeObject();
                item.SomeNumber = i;
                data.SomeObjectList.Add(item);
            }
            XmlSerializer serializer = new XmlSerializer(typeof(SomeData));
            TextWriter textWriter = new StreamWriter("C:\\seasonData.xml");
            serializer.Serialize(textWriter, data);
            textWriter.Close();

        }
    }


    [Serializable()]
    public class SomeObject
    {
        private int someNumber;
        public int SomeNumber
        {
            get { return someNumber; }
            set { this.someNumber = value; }
        }

    }
   
    [Serializable()]
    public class SomeData
    {
        private String someText;
        public String SomeText
        {
            get { return someText; }
            set { this.someText = value; }
        }
        private List<SomeObject> someObjectList;
        public List<SomeObject> SomeObjectList
        {
            get { return someObjectList; }
            set { this.someObjectList = value; }
        }
    }
}


Groeten

_________________
con\con

Stappen, keuzes en herhaling combineren is programmeren.
 
 Bekijk gebruikers profiel Stuur privé bericht Bekijk de homepage  
Reageer met quote Naar boven
Berichten van afgelopen:     
Ga naar:  
Tijden zijn in GMT + 1 uur
Plaats nieuw bericht   Plaats Reactie
Vorige onderwerp Printervriendelijke versie Log in om je privé berichten te bekijken Volgende onderwerp
PNphpBB2 © 2003-2007