[.net] XML serialisatie - verschillende klasse versies

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • IceM
  • Registratie: Juni 2003
  • Laatst online: 11:52
Hallo,

Momenteel ben ik bezig met een applicatie waarin vrij veel zaken in te stellen zijn door de gebruiker. Al deze instellingen (denk aan simpele applicatie instellingen maar ook door de gebruiker samengestelde filters voor data) wil ik op gaan slaan in een xml bestand (of bestanden).

Om niet het wiel voor de zoveelste keer uit te vinden dacht ik om dit te doen door het object naar xml te serializen en deze op te slaan in een XML bestand.

Ik loop echter tegen het probleem aan dat de opgeslagen instellingen niet altijd gelijk blijven. Naar mate de applicatie uitgebreider wordt zullen ook de instellingen uitgebreid worden. (denk bijv aan extra velden in een filter etc).

Ik wil voorkomen dat een gebruiker bij elke update van de applicatie opnieuw alle instellingen moet definiëren. Als ik echter een object serialize en opsla in een xml bestand en deze in een nieuwe versie van de applicatie weer wil deserializen gaat dit uiteraard mis wanneer er een andere versie van de klasse gebruikt wordt.

Mijn vraag is hoe ik dit probleem het beste op kan lossen. Het lijkt me dat dit probleem niet alleen bij mij voor komt maar dat andere mensen hier ook tegenaan zijn gelopen. Moet ik helemaal afstappen van het idee om instellingen op te slaan middels object serialisatie?

Zoeken heeft me niet veel verder gebracht. Ik krijg eigenlijk enkel hits over serialisatie met ergens een xml version attribute.

Mocht serialisatie niet de oplossing zijn, wat is dan wel een oplossing om:
  • Applicatie instellingen op te slaan als xml
  • Deze backwards compatible te houden (nieuwe velden krijgen gewoon geen waarde, oude waarden worden verwijderd)
  • Niet het wiel opnieuw uit te vinden

...


Acties:
  • 0 Henk 'm!

  • beany
  • Registratie: Juni 2001
  • Laatst online: 16:08

beany

Meeheheheheh

Misschien is de ConfigurationManager iets voor je?

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


Acties:
  • 0 Henk 'm!

  • IceM
  • Registratie: Juni 2003
  • Laatst online: 11:52
In mijn zoektocht naar de meest optimale manier om instellingen op te slaan ben ik deze ook tegen gekomen. Ik kan hiermee inderdaad bereiken wat ik wil (xml configuratie bestanden), ik moet echt nog steeds vrij veel "moeite" doen om alles bij te houden. Met xml serialisatie kan ik vrij eenvoudig al mijn objecten die ik wil bewaren dumpen en later weer ophalen.

Edit: Ook deze heb ik bekeken en leek mij in vergelijking met de ConfigurationManager van het framework zelf nog wat meer bieden.

[ Voor 14% gewijzigd door IceM op 04-07-2009 13:56 ]

...


Acties:
  • 0 Henk 'm!

  • beany
  • Registratie: Juni 2001
  • Laatst online: 16:08

beany

Meeheheheheh

Misschien is het een optie om een eigen serializer te schrijven. Met behulp van attributes zie ik niet echt problemen of dat het een enorm project zou moeten worden. Je kan dan wat flexibeler omgaan me het ontbreken van properties en zelf een mechaniek verzinnen wat de default waardes moeten zijn. Volgens mij is dit met een paar uurtjes zweten(vooral met deze temperaturen) zo voor elkaar, of ik zie iets over het hoofd.

En misschien is dit inderdaad het wiel opnieuw uitvinden, maar de tijd die nodig is is beperkt en je zal denk ik nooit het geen vinden wat precies aan jouw wensen voldoet(tenminste, dat heb ik altijd :P ). Daarbij komt ook dat je dit prima kan hergebruiken.

Dagelijkse stats bronnen: https://x.com/GeneralStaffUA en https://www.facebook.com/GeneralStaff.ua


Acties:
  • 0 Henk 'm!

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

Definieer in je class gewoon sane defaults:
C#:
1
2
3
4
class X
{
   int y = 10;
}

Ik dacht dat als je een oude XML-file inleest, deze defaults gebruikt worden. Kortom: speel eens met de XML serializer en zie wat de mogelijkheden zijn. Ik heb er in mijn projecten nog geen last van gehad dat ik een veld toevoegde.

ASSUME makes an ASS out of U and ME