Domanda

Sto cercando aiuto per raggiungere i seguenti

Il diagramma rappresenta una macchina, gli utenti possono aggiungere il motore e il colore

quando ho vista la XML che assomiglia a questo:

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

Quello che vorrei fare è quello di avvolgere l'auto all'interno 'veicolo', cioè

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

Non sono sicuro del modo migliore per raggiungere questo obiettivo. Voglio che il modello di esploratore e il codice XML generato per essere avvolti in 'veicolo', ma per tutti gli altri gli effetti l'utente sta lavorando con una macchina sola

Info: Visual Studio 2010, C # e SDK DSL per il 2010

È stato utile?

Soluzione 2

Ho risolto questo nel modo seguente. Sto doppio derivare la classe Car e nel serializzatore Car sto facendo questo:

Scrivendo gli elementi aggiuntivi:

  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();
    }
}

Per essere in grado di leggere questo ritorno in sto override del metodo Car LoadModel nel SerializationHelper e dove si sta facendo il lettore sto leggendo gli elementi fino a ottenere per auto.

....

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)
{

....

Altri suggerimenti

Vorrei provare due diversi approcci:


1 °: classe di override DSL Pacchetto DOCdata  Nel file di DocData.cs e metodo di sostituzione

protected override void OnDocumentSaved(System.EventArgs e)

e quindi vorrei creare l'involucro

dopo che avevo ATTIVAZIONE DocData.cs

protected override void OnDocumentLoading(System.EventArgs e)

e prima di chiamare il metodo di base base.OnDocumentLoading(e); vorrei cancellare dal file.


2 °: nella sezione DSL Explorer andare a serializzazione XML Comportamento e impostare Car dominio di classe "è su = true"

.

Questa soluzione non è semplice, ma non è così complicato come sembra al primo posto. Potrai necessario definire ogni singolo metodo, ma per ogni metodo personalizzato è possibile chiamare un metodo DSL generato chiamato "DefaulMethod", che ha il comportamento DSL serializzatore predefinito.


Attualmente sto usando VS 2005, per cui alcune cose potrebbero essere cambiate ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top