2009-08-13 1 views
0

에 루트 요소 추가 내가하고 싶은 무엇 DSL 내가 다이어그램은 차를 나타내는 다음</p> <p>는 사용자 내가 XML을 볼 때</p> <p>그것은 다음과 같습니다 엔진과 색상을 추가 할 수 있습니다 달성하기 위해 도움을 찾고 직렬화

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

즉, '차량'내부의 차를 포장

<Vehicle> 
    <Car> 
    <Engine>BigEngine</Engine> 
    <Colour>Pink</Colour> 
    </Car> 
</Vehicle> 
입니다이것을 달성하기위한 최선의 방법이 확실하지 않습니다. 2010

+0

당신이 말할 수 있습니까? 더 이상 도메인 모델과 일치하지 않습니다.아마도 다이어그램이 차량을 나타낼 수 있도록 변경해야할까요? –

+0

그것은 우리가 만들고있는 제품을위한 것입니다 - 자동차와 관련이 없지만 그것이 더 잘 보여줄 것이라고 생각했습니다. (제 3 자의) 도메인 모델은 Vehicle이 여러 개의 Cars를 가질 수 있으며, 도구가 생성 된 XML을 가져올 때이를 요구합니다. 그러나 DSL에서는 자동차가 1 대를 가질 것이므로 자동차 수준에서 다이어그램을 설정하고 직렬화 시간 또는 더 나은 곳에서 Vechicle 요소 만 추가하는 것이 좋습니다. 이게 말이 돼? –

답변

0

나는 다음으로이 문제를 해결했습니다. 나는 두 번 자동차 클래스를 파생하고 있고 자동차 시리얼에 나는이 일을 오전 :

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

내가의 자동차 LoadModel 방법을 재정의하고이 다시 읽을 수 있도록 : 여분의 요소를 작성

을 SerializationHelper 그리고 독자를 얻는 곳 자동차에 도착할 때까지 요소를 읽습니다.

....

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

.... 당신이이 일을하려는 이유

0
을위한 비주얼 스튜디오 2010, C# 및 DSL SDK : 나는 모델 탐색기와 생성 된 XML은 '차량'이 아니라 사용자가 자동차 전용

정보와 협력하고 다른 모든 의도와 목적을 위해 래핑 할


1 : 재정의 DSL 패키지 클래스 DocData DocData.cs 파일과 재정의 방법에서

protected override void OnDocumentSaved(System.EventArgs e) 

나는 두 개의 서로 다른 접근 방법을 시도 할 것

후 나는 래퍼

나중에 내가 DocData.cs

protected override void OnDocumentLoading(System.EventArgs e) 

과 내가 파일에서 삭제 할 기본 방법 base.OnDocumentLoading(e);를 호출하기 전에 우선 것 만들 것입니다. 2


: DSL 탐색기에서이 차 도메인 클래스를 XML 직렬화 동작에 가서 설정 "진정한 정의 =입니다".

이 솔루션은 간단하지 않지만 처음에는 보이는 것처럼 복잡하지 않습니다. 모든 단일 메서드를 정의해야하지만 각 사용자 지정 메서드에 대해 기본 DSL serializer 동작이있는 "DefaulMethod"라는 DSL 생성 메서드를 호출 할 수 있습니다.


나는 현재 VS 2005를 사용하고, 그래서 몇 가지가 변경되었을 수는 ...

+0

첫 번째 메시지를 살펴 봤지만 모두 볼 수있는 것은 SerializedModel (문자열) 이었지만 getter 만있었습니다. 나는 어떤 방법도 무시할 수 없었다. 나는 아직도 곤란하다 –

+0

Hej! 나는 공석 때문에 대답 할 기회가 없었습니다. "첫 번째 메시지"란 무엇을 의미합니까? 어떤 접근 방식을 시도 했습니까? –

관련 문제