Hvordan overstyre en attributt med XML

Utnytte "XmlAttributeOverrides" klasse og dens metoder er nyttig når du ønsker å overstyre et attributt under serialisering en "XmlSerializer" objekt. Dette lar deg serial objekter i flere måter fra et enkelt sett med serialiserbar klasser. Det er også mulig å utvide på en seriell klasse fra en DLL som du ikke har tilgang til. En praktisk anvendelse av dette er å serialisere medlemmer av en klasse eksempel i form av XML istedenfor attributter av XML-elementer.

Bruksanvisning

1 Åpne din kode kildefilen i et redigeringsprogram, for eksempel Microsoft Visual Studio Express.

2 Tilsett "System", "System :: IO" og "System :: Xml :: serialisering" biblioteker på toppen av filen. Dette lar deg få tilgang til XML "Serializer" funksjoner og objekter. I C ++ dette gjøres ved å legge koden:

bruker namespace System;

bruker namespace System :: IO;

bruker namespace System :: Xml :: Serialization;

3 Definer tre offentlige klasser for å bruke med XML-funksjoner. I C ++ dette gjøres ved å legge til følgende kode øverst i filen før dine funksjoner:

offentlig ref klasse Frukt

{

offentlig:

String ^ ripe_fruit;

};

offentlig ref klasse Apple: public Frukt

{

offentlig:

int amount_apples;

};

offentlig ref klasse Basket

{

offentlig:

array-<Frukt ^> ^ Frukt;

};

4 Lag nye "XmlAttributes" og "XmlElementAttribute" objekter i din funksjon, initialisere "XmlElementAttribute" objekt å bruke erstatning klasse og deretter legge til nye element til samlingen av elementer. I C ++ dette gjøres ved å legge koden:

XmlAttributes ^ my_attrs = gcnew XmlAttributes;

XmlElementAttribute ^ my_attr = gcnew XmlElementAttribute;

my_attr-> ElementName = "Apple";

my_attr-> Type = Apple :: typeid;

my_attrs-> XmlElements-> Legg til (my_attr);

5 Lag en ny "XmlAttributeOverrides" objekt og kaller sin "Legg til" metode for å legge det overordnede klassen type og "XmlAttributes" objekt for å overstyre den med. I C ++ dette gjøres ved å legge koden:

XmlAttributeOverrides ^ my_attr_override = gcnew XmlAttributeOverrides;

my_attr_override-> Legg til (Basket :: typeid, "Frukt", attrs);

6 Lag en ny "XmlSerializer" objekt og initialisere den med "XmlAttributeOverrides" objekt. I C ++ dette gjøres ved å legge koden:

XmlSerializer ^ my_serializer = gcnew XmlSerializer (Basket :: typeid, my_attr_override);

7 Opprett et objekt for å serial. I C ++ dette gjøres ved å legge koden:

Basket ^ my_basket = gcnew Basket

8 Opprett et nytt objekt med avledet klasse. I C ++ dette gjøres ved å legge koden:

Apple ^ a = gcnew Apple;

a-> ripe_fruit = "Litt Ripe";

a-> amount_apples = 2;

matrise <Frukt ^> ^ my_Fruits = {a};

my_basket-> Frukt = my_Fruits;

9 Lag en "tekstforfatter" objekt og deretter serienummer objektet. I C ++ dette gjøres ved å legge koden:

Tekstforfatter ^ tw = gcnew Stream ( "fil.txt");

my_serializer-> serial (tw, my_basket);

tw-> Close ();

Koden har overstyrt "frukten" klasse, slik at feltet for å akseptere "Apple" klassen, som den arver fra "frukten" -klassen.

10 Lagre filen, kompilere og kjøre programmet for å overstyre attributter.