Dit is de opdracht genxs die kan worden uitgevoerd in de gratis hostingprovider van OnWorks met behulp van een van onze meerdere gratis online werkstations zoals Ubuntu Online, Fedora Online, Windows online emulator of MAC OS online emulator
PROGRAMMA:
NAAM
genxs - Mono's XML-serialisatiegenerator
KORTE INHOUD
genxs configuratiebestand [bestemmingsmap]
PRODUCTBESCHRIJVING
genxs is een tool voor het genereren van aangepaste XML-serialisatieschrijvers en -lezers voor klassen.
configuratiebestand is een configuratiebestand dat verschillende informatie specificeert, zoals de
klasse waarvoor de lezer en schrijver worden gegenereerd, de naam en naamruimte van de klassen
om te genereren, en een verzameling hooks om toe te passen. Door gebruik te maken van haken is dit mogelijk
pas het gedrag van de serializer aan zonder het gegenereerde bestand te hoeven wijzigen, dus
u kunt het veilig opnieuw genereren als de bronklasse wordt gewijzigd.
doelmap specificeert de map waar de bestanden zullen worden gegenereerd.
NOTITIE: Deze tool draait alleen in de Mono-runtime, omdat het sommige interne klassen niet gebruikt
beschikbaar in andere looptijden.
CONFIGURATIE FILE FORMAT
Het configuratiebestand is een xml-document gebaseerd op de volgende grammatica ("?" betekent
optioneel, "*" 0 of meer):
*
naam ?
naam ?
naam ?
naam ?
?
*
?
*
Een configuratiebestand kan meerdere "serializer"-elementen bevatten, die elk de
klasse waarvoor een serializer moet worden gegenereerd, samen met verschillende generatie-opties. De
bronklasse wordt gespecificeerd in de volgende attributen:
* klasse : naam van de klasse (inclusief naamruimte).
* bijeenkomst : montage naam. Het kan het volledige pad bevatten.
Generatie-opties worden gespecificeerd in onderliggende elementen:
* lezer : naam van de lezersklasse.
* geenReader : indien "waar", genereert het geen lezersklasse.
* schrijver : naam van de schrijversklasse.
* baseSerializer : naam van de basis XML-serialisatieklasse. Dit item is alleen 2.0.
* uitvoering : naam van de serializer-implementatieklasse. Dit item is alleen 2.0.
* geenSchrijver : indien "waar", genereert het geen schrijversklasse.
* namespace : naamruimte van de reader- en writer-klassen.
* genereerAsInternal : indien "waar", genereert het klassen als intern.
* outBestandsnaam : naam van het gegenereerde bestand.
* lezerHooks : een lijst met haken die op de lezer kunnen worden toegepast.
* schrijverHooks : een lijst met hooks die op de schrijver kunnen worden toegepast.
SPECIFICEREN: HOOKS
Met hooks kun je het gedrag van lezers en schrijvers aanpassen. Een haakspecificatie
volgt deze grammatica:
?
naam ?
naam *
naam ?
broncode ?
broncode ?
broncode ?
Het "type" attribuut specificeert de context waarin de hook wordt toegepast. Het kan er een zijn
het volgende:
* attributen : hook wordt toegepast waar attributen geserialiseerd/gedeserialiseerd zijn.
* geeft je de mogelijkheid : hook wordt toegepast waar elementen worden geserialiseerd/gedeserialiseerd.
* onbekend kenmerk : hook wordt toegepast waar onbekende attributen worden verwerkt.
* onbekendElement : hook wordt toegepast waar onbekende elementen worden verwerkt.
* lid : hook wordt toegepast waar een lid is geserialiseerd/gedeserialiseerd.
* type dan: : haak wordt toegepast voor het hele type.
Het "select" element specificeert de klassen en leden waaraan de hook moet worden toegevoegd.
Het kan de volgende elementen bevatten:
* typeNaam : de klasse met die naam wordt geselecteerd (moet naamruimte bevatten)
* typeAttribuut : alle klassen waarop dat attribuut is toegepast, worden geselecteerd
(geef de volledige naam van de attribuutklasse op, inclusief de naamruimte). Verschillende attribuutnamen
kan worden opgegeven.
* typeLid : naam van het klaslid waarvoor de hook moet worden toegevoegd.
De hook-broncode kan worden gespecificeerd met behulp van een van de volgende elementen:
* vervangen : de verstrekte broncode zal alle serialisatie/deserialisatie vervangen
bewerkingen in de hook-context.
* invoegenVóór : de broncode wordt toegevoegd vóór de hook-context.
* invoegenNa : de broncode wordt toegevoegd na de hook-context.
Bij het schrijven van de code voor een hook kun je een aantal speciale variabelen gebruiken die zijn gedefinieerd
tijdens het codegeneratieproces. De variabelen zijn de volgende:
* $TYPE: naam van de klasse die wordt gegenereerd, zonder naamruimte.
* $FULLTYPE: volledige naam van de klasse die wordt gegenereerd, inclusief naamruimte.
* $OBJECT: het object wordt geserialiseerd of gedeserialiseerd. Bij gebruik van een vervangende lezer
hook van het type "type", de hookcode moet hier het gedeserialiseerde object aan toewijzen
variabel.
* -I $ELEMENT: naam van het element van het object dat wordt geserialiseerd/gedeserialiseerd.
* $NAMESPACE: naamruimte van het element van het object dat wordt geserialiseerd/gedeserialiseerd.
* $LID: naam van het lid dat wordt geserialiseerd/gedeserialiseerd. Alleen geldig in de "member"
context.
HOOK Voorbeelden
In het volgende voorbeeld wordt een aanroep toegevoegd aan een Validate-methode na de deserialisatie van any
voorwerp:
Systeem.Xml.Schema.XmlSchema.Validate$TYPE ($OBJECT);
In dit voorbeeld wordt de code gespecificeerd die moet worden gebruikt om de XmlSchema-klasse te deserialiseren:
Systeem.Xml.Schema.XmlSchema
$OBJECT = System.Xml.Schema.XmlSchema.Read (lezer, null);
Die specificeert de code die moet worden gebruikt om XmlSchema-instanties te lezen:
Systeem.Xml.Schema.XmlSchema
$OBJECT.Write (Schrijver);
Met deze twee haken zal de serializer wat informatie afdrukken bij het serialiseren van de klasse
"Mijn klas":
MijnNaamruimte.MijnKlasse
Console.WriteLine ("Serialisering van mijn klas");
Console.WriteLine ("MyClass geserialiseerd");
MijnNaamruimte.MijnKlasse
Console.WriteLine ("Geserialiseerd lid $MEMBER");
Deze hook schrijft een extra element voor alle types die het custom attribuut hebben
"Mijnkenmerk":
MijnNaamruimte.MijnAttribuut
Writer.WriteStartElement ("privateData");
Writer.WriteString ($OBJECT.PrivateData);
Schrijver.WriteEndElement ();
CONFIGURATIE FILE VOORBEELD
Dit is het configuratiebestand dat wordt gebruikt om de serializer voor ServiceDescription te genereren:
ServiceBeschrijvingReaderBase
ServiceBeschrijvingWriterBase
Systeem.Web.Services.Beschrijving
ServiceBeschrijvingSerializerBase.cs
System.Web.Services.Configuration.XmlFormatExtensionPointAttribute
ServiceDescription.ReadExtension (Reader, $OBJECT);
Systeem.Xml.Schema.XmlSchema
$OBJECT = System.Xml.Schema.XmlSchema.Read (lezer, null);
System.Web.Services.Configuration.XmlFormatExtensionPointAttribute
ServiceDescription.WriteExtensions (Writer, $OBJECT);
Systeem.Xml.Schema.XmlSchema
$OBJECT.Write (Schrijver);
AUTEURS
Lluis Sánchez Gual ([e-mail beveiligd])
Gebruik genxs online met behulp van onworks.net-services