DSL Aggiungi Root Element alla serializzazione
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
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 ...