HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

SOAP szerializáció


Példaprogram letöltése

10219 bájt

Az objektumokban tárolt információ mentésének leghatékonyabb formája a szerializáció, melynek eredménye egy XML állomány, ahol az egyes tagobjektumok értékei az állomány tagjaiban jelennek meg. Az objektumok szerializációjának egy különleges formáját mutatjuk be cikkünkben a SoapAttributeOverrides osztály felhasználásával. A mentés lényege, hogy magunk határozhatjuk meg a tárolandó tagobjektumok körét, vagyis van lehetőségünk bizonyos elemek kihagyására, vagy a tárolandó tartalom felülírására, amire a hagyományos mentéskor nincs módunk.

A mellékelt példában egy Csoport nevű osztály példányát szerializáljuk, melynek tagjait (tagváltozók, tagobjektumok) SOAP attribútumokkal láttuk el, így biztosítva hogy később a bevezetőben említett osztály felhasználásával befolyásoljuk mentésüket.
A program két füle alatt a MENTÉS gombokkal végezhetjük el az objektum mentését egy XML állományba, majd a VISSZAOLVASÁS gombbal az állomány visszatöltése indítható el.
Az alkalmazás SerializeClass osztályában helyeztük el a műveleteket végző statikus metódusokat. De vizsgáljuk meg először a szerializálandó osztályt. Az osztály tagjai a következők:
Első tag egy karakterlánc, mely a csoport nevét tartalmazza.
public class Csoport
{
  [SoapAttribute (Namespace = "http://www.softwareonline.hu")]
  public string CsoportNev;
Szintén SoapAttribute megjelöléssel egy bájttömb, a csoport számával.
  [SoapAttribute(DataType = "base64Binary")]
  public Byte [] CsoportSzam;
Tartalmaz egy SoapElement attribútummal rendelkező tagot.
  [SoapElement(DataType = "nonNegativeInteger", ElementName = "TagokSzama")]
  public string TagSzam;
A SoapIgnore attribútummal rendelkező tag esetén van lehetőség a mentéskor rendelkezni arról, hogy bekerül-e a mentett állományba, vagy sem.
  [SoapIgnore] 
  public bool Mukodik;
  ...
}
A SerializeClass osztályban az SOriginal nevű metódus végzi el a szerializáció hagyományos formáját, melyben ugyan SOAP szerializációt végzünk, de nincs lehetőség az egyes tagok mentésével kapcsolatban arra, hogy felülírjuk az attribútumokban megadott rendelkezéseket.
Az XmlTypeMapping osztály segítségével térképezzük fel a szerializálandó típust.
XmlTypeMapping mapping = (new SoapReflectionImporter().ImportTypeMapping(typeof(Csoport)));
Majd felhasználásával létrehozunk egy XmlSerializer objektumot.
XmlSerializer serializer = new XmlSerializer(mapping);
Szükségünk van egy objektumba, mely az állományhoz rendelt adatfolyamba írja a bájtfolyamot.
TextWriter writer = new StreamWriter("SOriginal.xml");
A metódus két bemenő paramétere a Form két szövegmezőjében megadható értéket tartalmazza, ezeket most megadjuk a mentendő objektum megfelelő tagjaiban.
Csoport cs = new Csoport();
cs.CsoportNev = csoportnev;
cs.CsoportSzam = Convert.FromBase64String(csoportszam);
...
Miután a többi tag is értéket kapott elvégezzük a műveletet.
serializer.Serialize(writer, cs);
writer.Close();
A DOriginal metódusban a visszaolvasás kódját helyeztük el, mely csak abban különbözik, hogy itt egy TextReader objektum végzi a kiolvasást az adatfolyamból, valamint a Deserialize metódust hívjuk meg.
TextReader reader = new StreamReader("SOriginal.xml");
Csoport cs; 
cs = (Csoport)serializer.Deserialize(reader);
...
A felülíró szerializáció elvégzése előtt készítenünk kell egy saját szerializáló objektumot a CreateSerializer metódus segítésével. Ebben rendelkezünk arról, hogy az egyes attribútumokkal megjelölt tagváltozókat hogyan szerializáljuk.
Példányosítjuk a SoapOverrideAttributes osztályt.
SoapAttributeOverrides attrOverrides = new SoapAttributeOverrides();
Létrehozunk egy objektumot az attribútumok listája számára.
SoapAttributes soapAttr = new SoapAttributes();
Hozzáadhatunk egy új elemet a szerializált objektumhoz.
SoapElementAttribute soapElement = new SoapElementAttribute();
soapElement.ElementName = "UjElem";
soapAttr.SoapElement = soapElement;
A SoapIgnore attribútummal megjelölt elem normális esetben kimaradna a tárolandó tagok listájából, azonban itt ezt a rendelkezésünket is megváltoztathatjuk.
SoapIgnoreAttribute ignore = new SoapIgnoreAttribute();
soapAttr = new SoapAttributes();
soapAttr.SoapIgnore = false;      
attrOverrides.Add(typeof(Csoport), "Mukodik", soapAttr);
Felülírhatjuk a felsorolt típusok definícióit is.
soapAttr = new SoapAttributes();
SoapEnumAttribute soapEnum = new SoapEnumAttribute();
soapEnum.Name = "FelulirtCsoportTipus";
soapAttr.SoapEnum = soapEnum;
attrOverrides.Add(typeof(CsoportTipus), "nagycsoport", soapAttr);
Még az állomány főcsomópontjának megnevezését – ami alapesetben a mentendő objektum típusának neve - is módosíthatjuk.
soapAttr = new SoapAttributes();
SoapTypeAttribute soapType = new SoapTypeAttribute();
soapType.TypeName = "Team";
soapAttr.SoapType = soapType;
attrOverrides.Add(typeof(Csoport),soapAttr);
Végül létrehozzuk az ily módon képzett minta alapján a szerializáló objektumot.
XmlTypeMapping mapping = (new SoapReflectionImporter(attrOverrides)).ImportTypeMapping(typeof(Csoport));
XmlSerializer serializer = new XmlSerializer(mapping);
return serializer;
A SOverride metódusban már ezt a felülírt tulajdonságú objektumot használjuk fel a mentésre, a többi művelet nem változik.
public static void SOverride(string csoportnev, string csoportszam)
{
  XmlSerializer oserializer = CreateSerializer();
  ...
}
Csakúgy, mint a DOverride felülírt deszerializációt megvalósító metódusban.
public static void DOverride(out string csoportnev, out string csoportszam)
{
  XmlSerializer oserializer = CreateSerializer();
  ...
}
A kétfajta szerializációt használó művelet eredménye egy-egy XML állomány, melyek a futtatható állomány mellé kerülnek. Felépítésükből jól látszik a két művelet közti eltérés.

Cikksorozat

#IDKategóriaCikk címeSorozat
2591WindowsTippek és trükkök - RAS - Modem csengetési szám állítása1. rész
2622WindowsTippek és trükkök - Program futtatása más felhasználóként2. rész
2640WindowsA Windows ikonméretének megváltoztatása és Windows 2000 Asztaltémák3. rész
2657WindowsTippek és trükkök - Internet Explorer4. rész
2667WindowsTippek és trükkök5. rész
2684WindowsAlapértelmezések állítása, telepítési fájlok helye, intéző nézetek6. rész
2696WindowsBiztonsági trükkök7. rész
2702WindowsWindows XP trükkök8. rész
2729WindowsWindows 2000 és XP tippek, trükkök9. rész
2757WindowsRegistry trükkök10. rész
2784WindowsTippek, trükkök11. rész
2829WindowsTippek, trükkök12. rész
2889WindowsWindows XP tippek13. rész
2909WindowsTippek Windows XP-hez14. rész
2919WindowsWindows tippek15. rész
2924WindowsWindows tippek16. rész
2963WindowsWindows tippek17. rész
2973WindowsWindows Tippek18. rész
2981WindowsWindows tippek19. rész
2990WindowsTippek-trükkök20. rész
3027WindowsIIS tippek21. rész
3034WindowsWindows XP tippek-trükkök22. rész
3088WindowsWindows 2000/XP tippek, trükkök23. rész
3133WindowsWindows XP tippcsokor24. rész
3140WindowsWindows XP tippek, trükkök25. rész
3152WindowsXP és IIS tippek - trükkök26. rész
3158WindowsWindows XP tippek, trükkök27. rész
3168WindowsTippek, trükkök28. rész
3170WindowsRegistry trükkök29. rész
3179WindowsTippek, trükkök30. rész
3197WindowsWindows XP tippek, trükkök31. rész
3205WindowsTippek, trükkök32. rész
3214WindowsTippek, trükkök33. rész
3223WindowsTippek, trükkök34. rész
3233WindowsTippek, trükkök35. rész
3271WindowsTippek, trükkök36. rész
3307WindowsTippek, trükkök37. rész
3370WindowsTippek, trükkök38. rész
3399WindowsTippek, trükkök39. rész
3510WindowsTippek, trükkök40. rész
3611WindowsHardverrel kapcsolatos tippek, trükkök41. rész
3668WindowsRegistry trükkök42. rész
3711WindowsTippek, trükkök43. rész
3771WindowsTippek, trükkök44. rész
3801WindowsTippek, trükkök45. rész
3831WindowsTippek, trükkök46. rész
3891WindowsTippek, trükkök47. rész
3921WindowsTippek, trükkök48. rész
3981WindowsTippek, trükkök49. rész
4041WindowsTippek, trükkök50. rész
4071WindowsTippek, trükkök51. rész
4151WindowsTippek, trükkök52. rész
4171C#Tippek, trükkök53. rész
4211WindowsTippek, trükkök54. rész
4251WindowsTippek, trükkök55. rész
4281WindowsTippek, trükkök56. rész
3589DelphiTippek, trükkök57. rész
3718DelphiTippek, trükkök58. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 412. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |