Szerializáció Tóth Zsolt Miskolci Egyetem 2014 Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 1 / 22
Tartalomjegyzék 1 Szerializációs Alapfogalmak 2 Szerializációs Megoldások Object Szerializáció XML Szerializáció Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 2 / 22
Áttekintés Osztály Definíció Megadja: Tulajdonságokat Viselkedéseket Kapcsolatokat Osztályokkal (Öröklődés, tartalmazás) Külvilággal (Interface) Egyetlen előfordulás Fájlrendszeren tárolódik Objektum Egyedi Entitás (oid) Típusa van (Osztály) Saját állapot Memóriát foglal Memóriában tárolódik Megszűnik, értéke elvész Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 3 / 22
Motiváció Aktuális állapot megőrzése Mentés Aktuális állapot Összesítő adatok Biztonság Kommunikáció Alkalmazások között Hálózaton keresztül Adatbázist nem tárgyaljuk Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 4 / 22
Alternatívák Mentés Saját adatformátum Tömörebb (lehet) Költséges Módosítás? Adatbázis Szerver Szaktudás Hálózat SQLite Kommunikáció Saját fájlformátum Hatékony Költséges Módosítás? Saját protokoll Költséges Bonyolult Hibalehetőségek Tűzfalak stb. Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 5 / 22
Szerializáció technika Hatékony Általános Egyszerű.Net Framework része Számos formátum Bináris XML SOAP Szerializálható elemek Egyes objektumok Egyszerű adattagok Tömbök Kollekciók Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 6 / 22
Szerializáció Eljárás Objektum -> Byte Objektum -> Text Adott API metódusok Egyszerű konverzió Fájlműveletek Megkötések [Serializable] Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 7 / 22
Deszerializáció Eljárás Byte -> Objektum Text -> Objektum Adott API metódusok cast olás Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 8 / 22
Tartalomjegyzék 1 Szerializációs Alapfogalmak 2 Szerializációs Megoldások Object Szerializáció XML Szerializáció Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 9 / 22
Objektum Szerializáció Object -> Byte Byte -> Object Számos formátum Bináris JSON SOAP [Serializable] [NonSerialized] SerializationException using System; [Serializable] class Person{... } Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 10 / 22
IFormatter System.Runtime.Serialization Interface Szerializált objektumok formázása. void Serialize( Stream serializationstream, Object graph); Object Deserialize( Stream serializationstream); Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 11 / 22
BinaryFormatter System.Runtime.Serialization.Formatters.Binary Bináris formázás Object -> Byte Egyszerű [ Serializable ] attribútum Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 12 / 22
Öröklődés Osztályok közötti hierarchia Kiterjesztés Hatással van a szerializációra Őst is kell szerializálni [Serializable] class C1 {...} [Serializable] class C2 : C1 {...} Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 13 / 22
Példa using System; [Serializable] class Person { private string _name; private double _salary; } public Person(string name, double salary) {...} public override string ToString() {...} Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 14 / 22
Serialization Példa Person p = new Person("John Doe",100); Stream outputstream = new FileStream(BinFile,FileMode.Create); BinaryFormatter bf = new BinaryFormatter(); //Serializaiton bf.serialize(outputstream,p); outputstream.close(); //Deserializtaion Stream inputstream = File.OpenRead(BinFile); p = (Person) bf.deserialize(inputstream); outputstream.close(); Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 15 / 22
Tartalomjegyzék 1 Szerializációs Alapfogalmak 2 Szerializációs Megoldások Object Szerializáció XML Szerializáció Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 16 / 22
XML Adattárolás extensible Markup Language Jelölő nyelv (HTML) Szöveges állomány Adattárolás Hierarchikus adatstruktúra Gépi feldolgozásra Elterjedt XHTML Beállítások tárolása Android SOAP... Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 17 / 22
XML Szerializáció System.Xml.Serialization XmlSerializer osztály Nyilvános jelzőket igényel Üres konstruktor private adattag public Propery Nem kell [Serializable] Számos attribútum: XmlElement XmlRoot XmlArray XmlArrayItem Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 18 / 22
XmlSerializer Osztály XML szerializálásért felel XmlSerializer(Type) typeof operátor Serialize(Stream,Object) Deserialize(Stream) Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 19 / 22
Példa public class Person { private int _age; private string _name; public string Name { get; set; } public double Salary { get; set; } } public Person() {} public Person(string name, double salary,int age) {...} Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 20 / 22
Példa Person p = new Person("John Doe",100,25); XmlSerializer serializer = new XmlSerializer(typeof(Person)); var file = new FileInfo("person.xml"); //serialization Stream outputstream = file.openwrite(); serializer.serialize(outputstream,p); outputstream.close(); //deserialization Stream inputstream = file.openread(); p = (Person) serializer.deserialize(inputstream); inputstream.close(); Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 21 / 22
Példa <?xml version="1.0"?> <Person xmlns:xsi= "http://www.w3.org/2001/xmlschema-instance" xmlns:xsd= "http://www.w3.org/2001/xmlschema"> <Name>John Doe</Name> <Salary>100</Salary> </Person> Tóth Zsolt (Miskolci Egyetem) Szerializáció 2014 22 / 22