Klassen vars instanser ska kunna serialiseras måste vara public.
Spaceship.cs
publicclassSpaceship{ // Lägg som vanligt in variabler, properties, metoder etc här}
Det är också enbart publika variabler samt properties med publika getters och setters som serialiseras.
Om du ska deserialisera XML-kod som du får från något annat ställe och inte designat själv, så behöver du vara noga med att matcha namnet på dina publika variabler/properties mot XML-filens. Serialiseringsprocessen är dock inte känslig vad gäller stora och små bokstäver.
Tyvärr är XmlSerializern inte skriven som en generisk klass, så istället måste man använda typeof för att meddela vilken klass det är serialiseraren ska specialisera sig på.
Serialize()
När vi har en serialiserare så kan vi använda den för att serialisera en instans av en klass.
Beroende på om man vill ha ut XML-koden till en string eller till en fil behövs en StringWriter eller en FileStream.
Serialiseraren kan också användas för att omvandla XML-text till en instans av klassen.
Beroende på om XML-koden finns i en string eller till en fil behövs en StringReader eller en FileStream.
Spaceship myShip; // Variabeln resultatet lagras i// xmlText är en variabel som innehåller XML-dataStringReader textReader =newStringReader(xmlText);myShip = (Spaceship) shipSerializer.Deserialize(textReader);textReader.Close();
Spaceship myShip; // Variabeln resultatet lagras i// ship.xml är en fil som innehåller XML-dataFileStream file =File.Open(@"ship.xml",FileMode.OpenOrCreate);myShip = (Spaceship) shipSerializer.Deserialize(textReader);file.Close();
Eftersom serializern inte är skriven som en generisk klass så måste vi aktivt casta det Deserialize returnerar till den klass vi vill att det ska vara (och vet att det borde vara), i det här fallet Spaceship.
Samma kod kan skrivas så här, med hjälp av ett using-statement: