다음을 통해 공유


파일 저장소 및 XML Serialization 사용자 지정

사용자 인스턴스를 저장할 때 또는 모델, 도메인 관련 언어 (DSL)에 Visual Studio, XML 파일을 만들거나 업데이트 합니다.파일 저장소에서 모델을 다시 다시 로드할 수 있습니다.

Serialization 체계의 설정을 조정 하 여 사용자 지정할 수 있습니다 Xml Serialization 동작 DSL 탐색기에서.아래에 있는 노드가 Xml Serialization 동작 모든 도메인 클래스, 속성 및 관계에 대 한.소스 클래스는 관계 있습니다.또한 노드 셰이프, 커넥터, 및 클래스 다이어그램에 해당 됩니다.

고급 사용자 지정에 대 한 프로그램 코드를 작성할 수도 있습니다.

[!참고]

모델을 특정 형식으로 저장 하지만에서 양식을 다시 로드할 필요가 없습니다 하는 경우 텍스트 서식 파일을 사용 하 여 사용자 지정 serialization 체계의 모델에서 출력을 생성 하는 것이 좋습니다.자세한 내용은 도메인별 언어에서 코드 생성를 참조하십시오.

모델 및 다이어그램 파일

각 모델은 일반적으로 두 개의 파일에 저장 됩니다.

  • 모델 파일에 이름이 같은 있습니다 Model1.mydsl.모델 요소와 관계 및 해당 속성을 저장합니다.같은 파일 확장명 .mydsl 에 의해 결정 됩니다의 FileExtension 속성에는 편집기 DSL 정의에 노드.

  • 다이어그램 파일에 이름이 같은 있습니다 Model1.mydsl.diagram.이 셰이프, 커넥터 및 이들의 위치, 색, 선 두께 및 기타 세부 다이어그램의 모양에 저장 됩니다.사용자가 삭제 한 경우는 .diagram 파일을 모델에서 중요 한 정보 않습니다 손실 됩니다.다이어그램의 레이아웃은 손실 됩니다.모델 파일을 열면 기본 도형으로 설정 하 고 커넥터를 만들 수 있습니다.

DSL의 파일 확장명을 변경 하려면

  1. DSL 정을 엽니다.DSL 탐색기에서 편집기 노드를 클릭 합니다.

  2. 속성 창에서 편집을 FileExtension 속성입니다.초기에 포함 되지 않습니다 "." 파일 이름 확장명입니다.

  3. 솔루션 탐색기에서 두 개의 항목이 템플릿 파일의 이름을 변경 DslPackage\ProjectItemTemplates.이러한 파일 형식에 따라 이름이 있습니다.

    myDsl.diagram

    myDsl.myDsl

기본 Serialization 체계

이 항목에 대 한 예제를 만들려면 다음 DSL 정의 했습니다.

DSL 정의 다이어그램 - 패밀리 트리 모델

이 DSL이 화면에 다음과 같은 모양의 모델을 만드는 데 사용 되었습니다.

패밀리 트리 다이어그램, 도구 상자 및 탐색기

이 모델 저장 이며 다음 XML 텍스트 편집기에서 열립니다.

<?xml version="1.0" encoding="utf-8"?>
<familyTreeModel xmlns:dm0="https://schemas.microsoft.com/VisualStudio/2008/DslTools/Core" dslVersion="1.0.0.0" Id="f817b728-e920-458e-bb99-98edc469d78f" xmlns="https://schemas.microsoft.com/dsltools/FamilyTree">
  <people>
    <person name="Henry VIII" birthYear="1491" deathYear="1547" age="519">
      <children>
        <personMoniker name="/f817b728-e920-458e-bb99-98edc469d78f/Elizabeth I" />
        <personMoniker name="/f817b728-e920-458e-bb99-98edc469d78f/Mary" />
      </children>
    </person>
    <person name="Elizabeth I" birthYear="1533" deathYear="1603" age="477" />
    <person name="Mary" birthYear="1515" deathYear="1558" age="495" />
  </people>
</familyTreeModel>

Serialize 된 모델에 대 한 다음 사항을 확인 합니다.

  • 초기 문자 소문자로 된 것을 제외 하 고 각 XML 노드는 도메인 클래스 이름과 동일한 이름을 가집니다.예를 들면, familyTreeModel 및 person처럼 표시해야 합니다.

  • 도메인 등록 정보 이름과 BirthYear 같은 XML 노드 특성으로 serialize 됩니다.다시 속성 이름의 초기 문자 소문자로 변환 됩니다.

  • 관계의 소스 end 안에 중첩 된 XML 노드로 각 관계 serialize 됩니다.노드의 소스 역할 속성, 하지만 초기 소문자 문자를 이름이 같은 있습니다.

    예를 들어, DSL 정의 라는 역할에서에서 People 를 기반으로 FamilyTree 클래스입니다.XML에서이 이름의 노드가 표시 됩니다 people 안에 중첩 된는 familyTreeModel 노드.

  • 각 포함 관계의 대상 끝 노드 아래에서 관계를 중첩으로 serialize 됩니다.예를 들어, 있는 people 노드가 포함 된 몇 가지 person 노드.

  • 각 참조 관계의 대상 끝으로 연속 되는 모니커, 대상 요소에 대 한 참조를 인코딩합니다.

    예를 들어, 아래는 person 노드를 있을 수 있는 children 관계.이 노드의 모니커를 같이 포함 되어 있습니다.

    <personMoniker name="/f817b728-e920-458e-bb99-98edc469d78f/Elizabeth I" />
    

모니커를 이해

모니커 모델 및 다이어그램 파일의 여러 부분 간에 상호 참조를 나타내는 데 사용 됩니다.또한 사용 되는 .diagram 노드 모델 파일에서 참조 하는 파일입니다.두 가지 형태의 모니커가 있습니다.

  • 모니커를 id 견적 대상 요소의 GUID입니다.예를 들면 다음과 같습니다.

    <personShapeMoniker Id="f79734c0-3da1-4d72-9514-848fa9e75157" />
    
  • 키 모니커 한정 된 모니커 키 라는 도메인 지정 된 속성의 값으로 대상 요소를 식별 합니다.모니커 대상 요소의 포함 관계의 트리는 부모 요소의 모니커에 의해 붙습니다.

    다음 예제에서 도메인 명명 된 곡 클래스는 포함 관계 있는 앨범 이라는 도메인 클래스는 DSL입니다입니다 가져옵니다.

    <albumMoniker title="/My Favorites/Jazz after Teatime" />
    <songMoniker title="/My Favorites/Jazz after Teatime/Hot tea" />
    

    정규화 된 키 모니커 사용 됩니다 도메인 속성에 대 한 대상 클래스에 있는 경우 옵션 모니커 키 설정 되어 true 에서 Xml Serialization 동작.예제에서는 "앨범"와 "노래" 도메인 클래스에 "Title" 이라는 도메인 등록 정보에 대 한이 옵션이 설정 됩니다.

정규화 된 키 모니커는 ID 모니커를 보다 읽기 쉽게입니다.사용자가 읽을 수 있도록 XML 모델 파일을 사용할 경우 정규화 된 키 모니커를 사용 하는 것이 좋습니다.그러나 사용자에 대 한 동일한 모니커 키가 요소가 두 개 이상 설정할 수 있습니다.중복 된 키 파일을 올바르게 다시 로드 될 수 있습니다.따라서 정규화 된 키 모니커를 사용 하 여 참조 되는 도메인 클래스를 정의 하는 경우 중복 된 모니커를 사용할 수 있는 파일을 저장 하지 못하도록 하는 방법을 고려해 야 합니다.

도메인 클래스 ID 위해 모니커에 의해 참조 되도록 설정 하려면

  1. 입니다 모니커 키 입니다 false 클래스와 기준 클래스의 모든 도메인 속성에 대 한.

    1. DSL 탐색기 확장 Xml Serialization Behavior\Class Data\< 도메인 클래스 >\Element 데이터.

    2. 확인 입니다 모니커 키 입니다 false 모든 도메인 속성에 대 한.

    3. 도메인 클래스에 기본 클래스가 있는 경우 해당 클래스의 절차를 반복 합니다.

  2. 설정 Serialize Id = true 도메인 클래스에 대 한.

    이 속성에서 찾을 수 있습니다 Xml Serialization 동작.

정규화 된 키 위해 모니커에 의해 참조 하는 도메인 클래스를 설정 하려면

  • 설정 모니커 키입니다 도메인 기존 도메인 클래스의 속성입니다.속성의 형식 이어야 합니다 string.

    1. DSL 탐색기 확장 Xml Serialization Behavior\Class Data\< 도메인 클래스 >\Element 데이터, 다음의 도메인 속성을 선택 합니다.

    2. 속성 창에서 설정 입니다 모니커 키 에 true.

  • -또는-

    새 도메인 클래스 만들기는 이라는 도메인 클래스 도구입니다.

    이 도구는 도메인 이름 이라는 속성을 가진 새 클래스를 만듭니다.요소의 이름입니다.모니커 키 이 도메인 속성 속성 초기화 되기 true.

  • -또는-

    상속 관계는 도메인 클래스에서 모니커가 키 속성이 있는 다른 클래스를 만듭니다.

Bb126447.collapse_all(ko-kr,VS.110).gif모니커를 중복 방지

정규화 된 키 모니커를 사용 하는 경우 사용자가 모델에서 두 개의 요소가 키 속성에 같은 값을 가질 수 있습니다.예를 들어, DSL 사용자 클래스 이름 속성을 가진 사람이 있는 경우 사용자가 두 개의 요소 이름을 동일 하 게 설정할 수 있습니다.모델 일 수 있지만 다시 파일 저장, 제대로 로드 수 없습니다.

이러한 상황이 발생 하지 않도록 여러 가지가 있습니다.

  • 설정 요소의 이름입니다. = true 키 도메인 속성에 대 한.DSL 정의 다이어그램에서 도메인 속성을 선택 하 고 속성 창에서 값을 설정 합니다.

    사용자 클래스의 새 인스턴스를 만들면이 값 도메인 속성에 다른 값을 자동으로 할당 됩니다.기본 동작은 클래스 이름 뒤에 숫자를 추가합니다.이 사용자 이름 중복으로 보호 하지 않는 있지만 사용자 값의 모델을 저장 하기 전에 설정 하지 않은 경우 경우에 도움이 됩니다.

  • DSL에 대 한 유효성 검사를 사용 하도록 설정 합니다.DSL 탐색기에서 editor\validation를 선택 하 고 설정에서 사용 하 여... 속성을 true.

    모호함에 대 한 검사는 자동으로 생성 한 유효성 검사 메서드는.메서드가 속한는 Load 유효성 검사 범주.이렇게 사용자가 해당 파일을 다시 열고 가능한 아닐 수 경고가 나타납니다.

    자세한 내용은 도메인별 언어에서 유효성 검사를 참조하십시오.

Bb126447.collapse_all(ko-kr,VS.110).gif모니커 경로 및 한정자

정규화 된 키 모니커 모니커 키가 끝나고 모니커가 포함 트리의 부모에 붙습니다.예를 들어, 앨범의 모니커입니다.

<albumMoniker title="/My Favorites/Jazz after Teatime" />

다음 앨범에 노래 중 하나일 수 있습니다.

<songMoniker title="/My Favorites/Jazz after Teatime/Hot tea" />

앨범 ID 대신 참조 하는 경우, 다음 모니커는 다음과 같이 같습니다.

<albumMoniker Id="77472c3a-9bf9-4085-976a-d97a4745237c" />
<songMoniker title="/77472c3a-9bf9-4085-976a-d97a4745237c/Hot tea" />

GUID가 고유 하기 때문이 절대로 부모의 모니커에 의해 붙습니다 있음을 알 수 있습니다.

특정 도메인 속성 모델 내에서 고유한 값을 항상 해야 합니다 아는 경우를 설정할 수 있습니다 모니커 한정자입니다 에 true 속성입니다.이렇게 부모 모니커를 사용 하지 않고는 한정자로 사용 하 게 됩니다.예를 들어, 두 가지 모두를 설정 하는 경우 모니커 한정자입니다모니커 키 앨범 클래스의 제목 도메인 속성에 대 한 모델의 이름 또는 식별자에 모니커 앨범 및 포함 된 자식에 대 한 사용 되지 않습니다.

<albumMoniker name="Jazz after Teatime" />
<songMoniker title="/Jazz after Teatime/Hot tea" />

XML의 구조를 사용자 지정합니다.

다음 사용자 지정을 수행 하려면 확장은 Xml Serialization 동작 DSL 탐색기에서에서 노드를 합니다.도메인 클래스에서 속성 및이 클래스를 기반으로 하는 관계를 보려면 데이터 요소 노드를 확장 합니다.관계를 선택 하 고 속성 창에서 해당 옵션을 조정 합니다.

  • 설정 요소를 생략 를 대상 요소 목록 내에서 소스 역할 노드를 생략 하려면 true입니다.소스와 대상 클래스 간의 관계가 하나 이상 경우이 옵션을 설정 해야 합니다.

    <familyTreeModel ...>
      <!-- The following node is omitted by using Omit Element: -->
      <!-- <people> -->
        <person name="Henry VIII" .../>
        <person name="Elizabeth I" .../>
      <!-- </people> -->
    </familyTreeModel>
    
  • 설정 전체 양식 사용 대상 노드의 관계 인스턴스를 나타내는 노드를 포함 합니다.도메인 등록 정보는 도메인 관계를 추가할 때이 옵션이 자동으로 설정 됩니다.

    <familyTreeModel ...>
      <people>
        <!-- The following node is inserted by using Use Full Form: -->
        <familyTreeModelHasPeople myRelationshipProperty="x1">
          <person name="Henry VIII" .../>
        </familyTreeModelHasPeople>
        <familyTreeModelHasPeople myRelationshipProperty="x2">
          <person name="Elizabeth I" .../>
        </familyTreeModelHasPeople>
      </people>
    </familyTreeModel>
    
  • 설정 표현 = 요소의 도메인 속성 대신 요소에 특성 값으로 저장 합니다.

    <person name="Elizabeth I" birthYear="1533">
      <deathYear>1603</deathYear>
    </person>
    
  • 특성 및 관계 된 연속 되는 순서를 변경 하려면 요소의 데이터 아래에서 항목을 마우스 오른쪽 단추로 클릭 하 고 사용 하는 위로 또는 아래로 이동 메뉴 명령입니다.

프로그램 코드를 사용 하는 주 사용자 지정

직렬화 알고리즘의 일부 또는 전부를 바꿀 수 있습니다.

코드에서 공부 하는 것이 좋습니다 Dsl\Generated Code\Serializer.csSerializationHelper.cs.

특정 클래스의 serialization을 사용자 지정 하려면

  1. 설정 사용자 정의 된 노드 아래에서 해당 클래스에 대 한 Xml Serialization 동작.

  2. 모든 템플릿 변환 솔루션을 빌드하고 컴파일 오류를 조사 합니다.거의 각 오류 설명을 제공 해야 할 어떤 코드를 설명 합니다.

전체 모델에 대 한 직접 serialization을 제공

  • Dsl\generatedcode\serializationhelper.cs의 메서드 재정의

Xml Serialization 동작 옵션

DSL 탐색기에서 Xml Serialization 동작 노드 각 도메인 클래스, 관계, 도형, 연결선 및 클래스 다이어그램의 자식 노드를 포함합니다.각 노드 아래의 속성 목록과 해당 요소를 기반으로 하는 관계입니다.관계에는 고가 원본 클래스에서 표시 됩니다.

다음 표에서이 DSL 정의이 섹션에서 설정할 수 있는 옵션이 요약 되어 있습니다.각각의 경우에서 DSL 탐색기에서 요소를 선택 하 고 속성 창에서 옵션을 설정 합니다.

Bb126447.collapse_all(ko-kr,VS.110).gifXml 클래스 데이터

이러한 요소의 DSL 탐색기에서 찾을 수 있습니다 Xml Serialization Behavior\Class 데이터.

Property

설명

사용자 지정 요소 스키마가

도메인 클래스에 사용자 지정 요소 스키마가 true 인 경우를 나타냅니다.

사용자 정의 됩니다.

이 true로 설정이 도메인 클래스에 대 한 직접 serialization 및 deserialization을 수행 하는 코드를 작성 하고자 합니다.

솔루션을 빌드하고 자세한 지침을 검색 하 여 오류를 조사 합니다.

도메인 클래스

이 클래스가 데이터 노드에 적용 되는 도메인 클래스입니다.읽기 전용.

요소 이름

이 클래스의 요소를 Xml 노드의 이름입니다.기본값은 도메인 클래스 이름은 소문자 버전입니다.

모니커가 특성 이름

모니커 요소에 대 한 참조를 포함 하는 사용 되는 특성의 이름입니다.키 속성이 나 id의 이름은 빈 경우에 사용 됩니다.

이 예제에서는 "name"입니다.<personMoniker name="/Mike Nash"/>

모니커가 요소 이름

이 클래스의 요소를 참조 하는 모니커를 사용 하 여 xml 요소의 이름입니다.

기본값은 클래스 이름 접미사로 "모니커"의 소문자 버전입니다.예를 들면 personMoniker와 같습니다.

형식 이름 모니커

모니커이 클래스가 요소에 대해 생성 된 xsd 형식 이름입니다.XSD에는Dsl\Generated Code\*Schema.xsd

Id를 serialize 합니다.

True 이면 요소 GUID는 파일에 포함 됩니다.True 이면 표시 되는 속성 이어야 합니다 모니커 키입니다 DSL이이 클래스에 대 한 참조 관계를 정의 하 고 있습니다.

형식 이름

지정 된 도메인 클래스 로부터 xsd에서 생성 된 xml 형식 이름입니다.

참고

이 요소와 연결 하는 비공식 메모

Bb126447.collapse_all(ko-kr,VS.110).gifXml 속성 데이터

Xml 속성 노드 아래의 클래스 노드를 찾을 수 있습니다.

Property

설명

도메인 속성

Xml serialization 구성 데이터가 적용 되는 속성입니다.읽기 전용.

모니커가 키입니다.

True 이면 속성은이 도메인 클래스의 인스턴스를 참조 하는 모니커를 만들기 위한 키로 사용 됩니다.

모니커가 한정자

True 인 경우, 속성 한정자 모니커를 만드는 데 사용 됩니다.False 인 경우와 Serializeid이 도메인 클래스에 대 한 true 이면 모니커 모니커가 포함 트리의 부모 요소에 의해 한정 됩니다.

표현

특성을 속성을 xml 특성으로 serialize 될 경우. 요소에이 인지; 요소로 serialize 무시가 아닐 경우 직렬화 합니다.

Xml 이름

Xml 특성 또는 속성을 나타내는 요소에 사용 되는 이름입니다.기본적으로 속성 이름은 소문자 버전입니다.

참고

이 요소와 연결 하는 비공식 메모

Bb126447.collapse_all(ko-kr,VS.110).gifXml 역할 데이터

역할 데이터 노드 아래 소스 클래스 노드를 찾을 수 있습니다.

Property

설명

사용자 지정 모니커를 했습니다.

이 생성 하 고이 관계를 통과 하는 모니커를 확인 코드를 입력 하는 경우 true로 설정 합니다.

자세한 지침에 대 한 솔루션, 빌드 및 다음 오류 메시지를 두 번 클릭 합니다.

도메인 관계

이러한 옵션을 적용 하는 관계를 지정 합니다.읽기 전용.

요소를 생략 합니다.

True 이면 소스 역할에 해당 하는 XML 노드는 스키마에서 생략 됩니다.

소스와 대상 클래스 간의 관계가 하나 이상 있으면이 역할 노드 간에 두 개의 관계에 속하는 연결을 구분 합니다.때문에이 옵션이 경우 설정 하지 않는 것이 좋습니다.

역할 요소 이름

소스 역할에서 파생 된 XML 요소의 이름을 지정 합니다.기본값은 역할 속성 이름입니다.

전체 양식 사용

True 인 경우, 관계를 나타내는 XML 노드에 각 대상 요소 또는 모니커 묶여 있습니다.이 관계는 도메인 속성이 있으면 true로 설정 해야 합니다.

참고 항목

개념

프로그램 코드에서 모델 탐색 및 업데이트

기타 리소스

도메인별 언어에서 코드 생성