Question

Je suis à la recherche de l'aide pour atteindre les objectifs suivants

Le diagramme représente une voiture, les utilisateurs peuvent ajouter le moteur et la couleur

quand je vois le XML, il ressemble à ceci:

<Car>
  <Engine>BigEngine</Engine>
  <Colour>Pink</Colour>
</Car>

Ce que je voudrais faire est d'envelopper la voiture à l'intérieur de « véhicule », i.e.

<Vehicle>
  <Car>
    <Engine>BigEngine</Engine>
    <Colour>Pink</Colour>
  </Car>
</Vehicle>

Je ne suis pas sûr de la meilleure façon d'y parvenir. Je veux l'explorateur de modèle et le code XML généré à emballer dans « véhicule », mais pour toutes les autres fins que l'utilisateur travaille avec une seule voiture

Info: Visual Studio 2010, C # et SDK DSL pour 2010

Était-ce utile?

La solution 2

J'ai résolu ce par ce qui suit. Je suis à double dérivez la classe de voitures et dans le sérialiseur Car je fais ceci:

L'écriture des éléments supplémentaires:

  public partial class CarSerializer : CarSerializerBase
{
    public override void Write(SerializationContext serializationContext, ModelElement element, XmlWriter writer, RootElementSettings rootElementSettings)
    {
        // Adds the Model and LobSystem root elements to match that required by the SharePoint BCS
        writer.WriteStartElement("Garage");
        writer.WriteStartElement("Cars");
        base.Write(serializationContext, element, writer, rootElementSettings);
        writer.WriteEndElement();
        writer.WriteEndElement();
    }
}

Pour pouvoir lire ce retour dans je redéfinissant la méthode loadModel Car dans le SerializationHelper et où il devient le lecteur que je suis en train de lire les éléments jusqu'à ce que je la voiture.

....

XmlReader reader = XmlReader.Create(fileStream, settings);
reader.MoveToContent();
while (!reader.EOF && !reader.Name.Equals("Car"))
{
   reader.Read();
}

reader = reader.ReadSubtree();

//    using (global::System.Xml.XmlReader reader = global::System.Xml.XmlReader.Create(fileStream, settings))
using (reader)
{

....

Autres conseils

Je voudrais essayer deux approches différentes:


1er: override DSL Package classe DOCdata  Dans le fichier de DocData.cs et un procédé de commande prioritaire

protected override void OnDocumentSaved(System.EventArgs e)

et puis je créerais l'emballage

après j'Override dans DocData.cs

protected override void OnDocumentLoading(System.EventArgs e)

et avant d'appeler la méthode de base base.OnDocumentLoading(e); je voudrais supprimer le fichier.


2 Sous DSL Explorer, sélectionnez Comportement XML sérialisation et sièges automobiles de classe Domaine "est personnalisée = true"

.

Cette solution est simple, mais il est pas aussi compliqué qu'il n'y paraît au premier lieu. Vous devez définir chaque méthode unique, mais pour chaque méthode personnalisée, vous pouvez appeler une méthode générée DSL appelée « DefaulMethod » qui a le comportement sérialiseur DSL par défaut.


Je suis actuellement en utilisant VS 2005, de sorte que certaines choses auraient pu changer ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top