0

私は以下を達成するための助けを探しています

図は車を表しており、ユーザーはエンジンと色を追加できます

XMLを表示すると、次のようになります。

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

私がやりたいのは、車を「車両」の中に包むことです。

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

これを達成するための最良の方法がわかりません。モデルエクスプローラーと生成されたXMLを「車両」でラップしたいのですが、他のすべての目的と目的では、ユーザーは車でのみ作業しています。

情報:Visual Studio 2010、C#およびDSL SDK for 2010

4

2 に答える 2

0

私は2つの異なるアプローチを試みます:


1番目: DocData.csファイルのDSLパッケージクラスDocDataをオーバーライドし、メソッドをオーバーライドします

protected override void OnDocumentSaved(System.EventArgs e)

次に、ラッパーを作成します

その後、DocData.csでオーバーライドします

protected override void OnDocumentLoading(System.EventArgs e)

そして、基本メソッドを呼び出す前にbase.OnDocumentLoading(e);、ファイルから削除します。


2番目: DSL Explorerで、XMLシリアル化動作に移動し、カードメインクラスを「IsCustom=true」に設定します。

この解決策は単純ではありませんが、そもそも見た目ほど複雑ではありません。すべてのメソッドを定義する必要がありますが、カスタムメソッドごとに、デフォルトのDSLシリアライザーの動作を持つ「DefaulMethod」と呼ばれるDSL生成メソッドを呼び出すことができます。


現在VS2005を使用しているので、変更されている可能性があります...

于 2009-08-18T09:41:32.973 に答える
0

私はこれを次のように修正しました。私はCarクラスを二重に導出しており、Carシリアライザーでこれを行っています。

余分な要素を書く:

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

これを読み返すことができるように、SerializationHelperのCar LoadModelメソッドをオーバーライドし、リーダーを取得している場所で、Carに到達するまで要素を読み取っています。

...。

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

...。

于 2009-09-23T15:20:43.970 に答える