Aracılığıyla paylaş


Dosya depolama ve xml Serialization özelleştirme

Kullanıcı bir örneği kaydettiğinde veya modeli, bir etki alanına özgü dil (dsl), Visual Studio, bir xml dosyası oluşturulduğunda veya güncelleştirildiğinde.Dosya deposu modelinde yeniden oluşturmak için yeniden yüklenmesi.

Seri hale getirme şeması altındaki ayarları değiştirerek özelleştirebilirsiniz Xml seri hale getirme davranış dsl Explorer.Bir düğüm altında Xml seri hale getirme davranış her etki alanı sınıfı, özellik ve ilişki.İlişkiler, kendi kaynak sınıfı altında bulunur.Şekli, bağlayıcı ve Diyagram sınıfları karşılık gelen düğümü vardır.

Daha gelişmiş özelleştirme için program kodu da yazabilirsiniz.

[!NOT]

Modeli, belirli bir biçimde kaydetmek istiyor, ancak formdan yeniden gerekmez, metin şablonları özel seri hale getirme düzeni yerine modelinden çıktı üretmesini kullanmayı düşünün.Daha fazla bilgi için bkz. Bir etki alanına özgü dil kodu oluşturma.

Model ve çizim dosyaları

Her model, çoğunlukla iki dosyalarında kaydedilir:

  • Model dosyasını gibi bir ada sahip Model1.mydsl.Bu modeli öğeleri ve ilişkileri ve bunların özelliklerini saklar.Dosya uzantısı gibi .mydsl tarafından belirlenen DosyaUzantısı özelliği Düzenleyicisi dsl tanımında düğüm.

  • Diyagram dosya gibi bir ada sahip Model1.mydsl.diagram.Bu şekiller, bağlayıcılar ve konumlarına, renkler, çizgi kalınlıklarını ve diğer ayrıntılarını Diyagramı görünümünü saklar.Kullanıcı silerse bir .diagram dosyası, önemli bilgiler modelinde değil kayıp.Diyagramın düzenini kaybolur.Model dosya açıldığında varsayılan şekilleri ayarlayın ve bağlayıcılar oluşturulacaktır.

dsl dosya uzantısını değiştirmek için

  1. dsl tanımını açın.dsl Explorer'da Editor düğümünü tıklatın.

  2. Properties penceresinde, Düzen DosyaUzantısı özelliği.İlk eklemeyin "." dosya adı uzantısı.

  3. Solution Explorer'da, iki madde şablonu dosyalarında adını değiştirmek DslPackage\ProjectItemTemplates.Bu dosyalar, bu biçime uymanýz adlara sahip olur:

    myDsl.diagram

    myDsl.myDsl

Varsayılan seri hale getirme şeması

Bu konu için bir örnek oluşturmak için aşağıdaki dsl tanımı kullanılıyordu.

DSL Definition diyagramı - Aile Ağacı Modeli

Bu dsl ekranda aşağıdaki görünüme sahip bir model oluşturmak için kullanıldı.

Aile Ağacı diyagramı, araç ve explorer

Bu model kaydedilir ve xml metin düzenleyicisinde açılabilir:

<?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>

Serileştirilmiş modeli hakkında aşağıdaki noktalara dikkat edin:

  • İlk harf küçük harf dışında her xml düğümü bir etki alanı sınıfının adıyla aynı olan bir adı vardır.Örneğin, familyTreeModel ve person.

  • Etki alanı adı ve BirthYear gibi özellikleri, xml düğümleri öznitelikleri olarak sıralanmış.Yine, özellik adının ilk karakteri küçük harfe dönüştürülür.

  • Her ilişki, ilişki kaynak sonuna içinde yuvalanmış bir xml düğümü olarak sıralanmış.Düğüm Kaynak rolü özelliği, ancak küçük harf ilk karakteri ile aynı ada sahip.

    Örneğin, tanımında dsl, adlı bir rol People adresindeki kaynaklanan FamilyTree sınıfı.XML'de bu adlı düğümü tarafından temsil edilen people içinde iç içe familyTreeModel düğüm.

  • Hedef son katıştırma her ilişkinin ilişki altında yuvalanmış bir düğüm olarak sıralanmış.Örneğin, people düğüm içeren birkaç person düğümleri.

  • Her başvuru ilişkinin hedef son olarak sıralanmış bir ad, kodlar hedef öğe başvurusudur.

    Örneğin, altında bir person düğümü olabilir bir children ilişkisi.Bu düğüm gibi takma adlar içerir:

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

Takma adlar anlama

Takma ad, model ve şema dosyalarının farklı bölümleri arasında çapraz temsil etmek için kullanılır.Ayrıca, kullanıldıkları .diagram düğümler modeli dosyasını belirtmek için dosya.Ad'ın iki biçimi vardır:

  • Kimliği takma ad hedef öğe GUID teklif.Örne?in:

    <personShapeMoniker Id="f79734c0-3da1-4d72-9514-848fa9e75157" />
    
  • Anahtar takma adların tam takma adını anahtar olarak adlandırılan belirlenen etki alanı özellik değerine göre hedef öğe belirle.İlişkiler katıştırma ağacında, üst öğenin ad tarafından hedef öğesinin adı öneki.

    Aşağıdaki örnekler, dsl, orada adlı şarkıyı sınıf bir gömme bir etki alanı ilişkisi albüm adlı bir etki alanı sınıftır dan alınır:

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

    Hedef etki alanı özellik varsa tam anahtar takma kullanılacak seçeneği Ad anahtarında ayarlamak true de Xml seri hale getirme davranış.Örnekte, etki alanı sınıfları "Albüm" ve "Şarkı" "Başlık" adlı etki alanı özellikleri için bu seçeneği ayarlayın.

Tam anahtar takma kimliği takma kolaydır.Kişiler tarafından okunmasını xml model dosyalarınızı düşünüyorsanız, nitelikli anahtar takma ad kullanımı göz önünde bulundurun.Ancak, kullanıcı birden fazla öğe aynı ad anahtarı ayarlamak mümkündür.Yinelenen anahtar dosyası doğru şekilde yeniden değil neden olabilir.Bu nedenle, tam anahtar takma ad kullanımı başvurulan etki alanı sınıf tanımlarsanız, kullanıcı yinelenen takma ad içeren bir dosyayı kaydetmesini engelleyen yolları göz önünde bulundurmalısınız.

Bir etki alanı sınıf kimliği takma adlarıyla başvurulacak ayarlamak için

  1. Emin olun Takma ad anahtarında olan false her etki alanı özellik sınıfı ve onun temel sınıflar için.

    1. dsl Explorer'da genişletin Xml seri hale getirme Behavior\Class Data\< etki alanı > sınıfı**\Element veri**.

    2. Emin olun Takma ad anahtarında olan false her etki alanı özelliği.

    3. Etki alanı sınıfın temel bir sınıf varsa, o sınıftaki yordamı yineleyin.

  2. Set Seri hale getirilmeye kimliği = true etki alanı sınıfı.

    Bu özellik altında bulunan Xml seri hale getirme davranış.

Tam anahtar takma adlarıyla başvurulacak bir etki alanı sınıf ayarlamak için

  • Set Takma ad anahtarında için varolan bir etki alanı sınıfının domain özelliği.Özellik türü olmalıdır string.

    1. dsl Explorer'da genişletin Xml seri hale getirme Behavior\Class Data\< etki alanı > sınıfı**\Element veri**ve daha sonra etki alanı özelliğini seçin.

    2. Properties penceresinde Takma ad anahtarında için true.

  • - veya -

    Yeni bir etki alanı sınıfını kullanarak oluşturmak Adında bir etki alanı sınıfı aracı.

    Bu aracın adı adlı bir etki alanı özelliği olan yeni bir sınıf oluşturur.Olan öğe adı ve Takma ad anahtarında bu etki alanı özellik özellikler için başlatılan true.

  • - veya -

    Bir miras ilişkisiyle etki alanı sınıfından bir takma ad anahtar özelliği olan başka bir sınıf oluşturun.

Bb126447.collapse_all(tr-tr,VS.110).gifYinelenen takma önleme

Tam anahtar takma adlar kullanırsanız, bir kullanıcının modelinde iki öğe aynı değeri anahtar özelliğinde olabilir mümkündür.Örneğin, dsl sınıf özellik adı olan bir kişi varsa, kullanıcı iki öğe adlarını aynı olacak şekilde ayarlayabilirsiniz.Model olabilmesine rağmen dosyasına kaydedilen, doğru yeniden değil.

Bu durumu önlemek yardımcı olacak birkaç yöntem vardır:

  • Set Olan öğe adı = true anahtar domain özelliği için.dsl Definition Diyagram üzerinde etki alanı özelliği seçin ve sonra da Properties penceresinde değerini ayarlayın.

    Kullanıcı sınıfının yeni bir örneğini oluşturur, bu değer otomatik olarak farklı bir değer atanması etki alanı özellik olur.Varsayılan davranış, sınıf adının sonuna bir numara ekler.Bu kullanıcı adı için bir yinelenen değiştirmelerini engellemez, ancak kullanıcı değer modeli kaydetmeden önce ayarlamaz, bu durumda da yardımcı olur.

  • dsl için doğrulamayı etkinleştirin.dsl Explorer Editor\Validation seçin ve set kullanır... özelliklerini true.

    Ambiguities için denetleyen bir otomatik olarak oluşturulan doğrulama yöntemi vardır.Yöntemin içinde yer Load Doğrulama kategori.Bu kullanıcı bu dosyayı yeniden açmak mümkün olmayabilir, uyarılırsınız emin olmayı sağlar.

    Daha fazla bilgi için bkz. Bir etki alanına özgü dil doğrulama.

Bb126447.collapse_all(tr-tr,VS.110).gifTakma ad yolları ve niteleyiciler

Tam bir anahtar ad ad anahtarýyla biter ve gömme ağacında üst öğesinin adı öneki.Örneğin, bir albümün adı ise:

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

Daha sonra bu albümdeki şarkıları biri olabilir:

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

Albümleri yerine kimliği tarafından başvurulan, ancak daha sonra takma adlar şöyle olacaktır:

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

Bir GUID benzersiz olduğu için onu hiçbir zaman üst takma ad konduğundan emin dikkat edin.

Belirli bir etki alanı özelliği bir model içinde benzersiz bir değer her zaman olacaktır biliyorsanız belirleyebilirsiniz Takma ad niteleyicisi olan için true bu özellik için.Bu üst takma adını kullanmadan bir niteleyici kullanılmasına neden olur.Örneğin, hem de set Takma ad niteleyicisi olan ve Takma ad anahtarında için başlık domain özelliği albüm sınıfının modelinin adı veya tanımlayıcı takma adlar albüm ve katıştırılmış alt için kullanılmaz:

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

xml yapısını özelleştirme

Aşağıdaki özelleştirmeler yapmak için genişletme Xml seri hale getirme davranış dsl Explorer düğüm.Bir etki alanı sınıfı altında özellikleri ve bu sınıfın kaynaklanan ilişkileri listesini görmek için öğe veri düğümünü genişletin.Bir ilişki seçin ve Properties penceresinde seçeneklerini ayarlayın.

  • Set İhmal öğesi yalnızca hedef öğeler listesi bırakarak Kaynak rolü düğümü atlamak çok doğru.Kaynak ve hedef sınıfları arasında birden fazla ilişki varsa bu seçenek girmemelisiniz.

    <familyTreeModel ...>
      <!-- The following node is omitted by using Omit Element: -->
      <!-- <people> -->
        <person name="Henry VIII" .../>
        <person name="Elizabeth I" .../>
      <!-- </people> -->
    </familyTreeModel>
    
  • Set Kullanımı tam Form ilişki örneklerini temsil eden düğümler hedef düğüm katıştırmak için.Bir etki alanı ilişkisi için etki alanı özellikleri eklediğinizde, bu seçenek otomatik olarak ayarlanır.

    <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>
    
  • Set gösterimi = öğesinin yerine bir öğe özniteliği değeri olarak kaydedilmiş bir etki alanı özelliği.

    <person name="Elizabeth I" birthYear="1533">
      <deathYear>1603</deathYear>
    </person>
    
  • Hangi nitelikleri ve ilişkileri seri sırasını değiştirmek için öğe verisi bir öğeyi sağ tıklatın ve kullanmak Yukarı Taşı veya Aşağı Taşı menü komutları.

Program kodunu kullanarak önemli özelleştirme

Parça veya seri hale getirme algoritmaları değiştirebilirsiniz.

Kodu incelerken öneririz Dsl\Generated Code\Serializer.cs ve SerializationHelper.cs.

Belirli bir sınıfın seri hale getirme özelleştirmek için

  1. Set Olan özel düğümü altında o sınıf için de Xml seri hale getirme davranış.

  2. Tüm şablonları dönüştürme, çözümü ve ortaya çıkan derleme hataları inceleyin.Her hata yakınında yorumlar sağlamak zorunda ne kodu açıklayın.

Tüm model için kendi seri hale getirme sağlamak için

  • Dsl\GeneratedCode\SerializationHelper.cs yöntemi geçersiz kıl

Xml Serialization davranış seçenekleri

dsl Explorer'da Xml seri hale getirme davranış düğüm her etki alanı sınıfı, ilişki, şekli, bağlayıcı ve Diyagram sınıfı için bir alt düğümü içerir.Her dinlemeyen düğümleri altında özellikleri ve ilişkileri o öğeye kaynaklanan listesidir.İlişkiler hem de kendi hakkını kendi kaynak sınıflar altında gösterilir.

Bu dsl tanım bölümünde belirlediğiniz seçenekler aşağıdaki tabloda özetlenmiştir.Her durumda, dsl Explorer'da bir öğesini seçin ve Properties penceresinde seçeneklerini ayarlayın.

Bb126447.collapse_all(tr-tr,VS.110).gifXML sınıfı veri

Bu öğeleri dsl Explorer altında bulunan Xml seri hale getirme Behavior\Class veri.

Özellik

Description

Özel öğe şeması vardır

TRUE ise, etki alanı sınıfı özel öğenin şema olduğunu gösterir

Özel olması

Bu doğru ise olarak bu etki alanı sınıfının kendi seri hale getirme ve serisini kaldırma kodu yazmak.

Çözümü oluþturun ve ayrıntılı yönergeleri bulmak için hataları inceleyin.

Etki alanı sınıfı

Bu sınıf veri düğümü geçerli olduğu etki alanı sınıf.Salt okunur.

Öğe adı

Bu sınıfın öğelerinin XML düğüm adı.Varsayılan değer, etki alanı sınıf adı kesinlikle eşleştirilecek bir sürümüdür.

Takma ad özniteliği adı

Başvuru için ad öğeleri kullanılan özniteliğinin adı.Boşsa, anahtar özelliği veya kimliği adı kullanılır.

Bu örnekte, "ad" şöyledir:<personMoniker name="/Mike Nash"/>

Takma ad öğesi adı

Bu sınıfın öðelere baþvurmak takma adlar için kullanılan xml öğesi adı.

Varsayılan değer "Takma adı ile" Design View'e son ekli sınıf adı küçük sürümüdür.Örneğin, personMoniker.

Ad türü adı

Bu sınıfın öğeleri takma adlar için oluşturulan xsd türü adı.xsd bulunmaktadırDsl\Generated Code\*Schema.xsd

Kimliği seri hale getirilmeye

TRUE ise, ' % s'öğesi GUID dosyasına eklenir.Bu işaretlenmiş bir özellik yok ise true olmalıdır Takma ad anahtarında ve dsl bu sınıfa başvuru ilişkileri tanımlar.

Tür Adı

Belirlenen etki alanı sınıfından xsd içinde oluşturulan xml türü adı.

Notlar

Bu öğeyle ilişkili resmi olmayan notları

Bb126447.collapse_all(tr-tr,VS.110).gifXML özellik veri

XML özellik düğümleri sınıf düğümü altında bulunur.

Özellik

Description

Etki alanı özelliği

Xml serialization yapılandırma verilerini uygulandığı özellik.Salt okunur.

Takma ad anahtarı.

TRUE ise, bu etki alanı sınıfın örneklerine başvurmak takma adlar oluşturmak için anahtar özelliği kullanılır.

Takma ad niteleyicisi olan

TRUE ise, özellik takma ad niteleyicisi oluşturmak için kullanılır.FALSE ise ve SerializeId bu etki alanı sınıf için doğru değilse, takma adların gömme ağacında üst öğenin ad olarak nitelenir.

Gösterim

Niteliği, özelliği bir xml özniteliği olarak sıralanmış, Öğesi, onu olup serileştirilmiş bir öğesi olarak; Yoksay, değilse, seri hale getirilmiş.

XML adı

Xml özniteliği veya özelliği temsil eden öğe için kullanılan ad.Varsayılan olarak, etki alanı özellik adı kesinlikle eşleştirilecek bir sürümünü budur.

Notlar

Bu öğeyle ilişkili resmi olmayan notları

Bb126447.collapse_all(tr-tr,VS.110).gifXML rol veri

Rol veri düğümlerinin altında kaynak sınıfı düğümler bulundu.

Özellik

Description

Özel ad yok

Bu kendi kodunuzu oluşturma ve bu ilişki Gez takma ad çözümleme sağlamak isterseniz true olarak ayarlayın.

Ayrıntılı yönergeler için çözümü oluþturun ve hata iletileri çift tıklatın.

Etki alanı ilişkisi

Bu seçenekler uygulandığı ilişkiyi belirtir.Salt okunur.

Öğe atlayın

TRUE ise, kaynak role karşılık gelen xml düğümü şemadan atlandı.

Kaynak ve hedef sınıfları arasında birden fazla ilişki ise bu rolü düğüm iki ilişkileri ait bağlantılar ayırt eder.Bu nedenle, bu seçenek bu durumda değil öneririz.

Rol öğesi adı

Kaynak rolünden türetilmiş bir xml öğesi adını belirtir.Rol özellik adı varsayılan değerdir.

Tam biçimini kullanın

TRUE ise, her hedef öğe veya takma ad ilikiyi temsil eden bir xml düğümü içine alınır.Bu ilişki, kendi etki alanı özellikleri varsa true olarak ayarlanmalıdır.

Ayrıca bkz.

Kavramlar

Gezinme ve Program kodunda bir modeli güncelleştiriliyor

Diğer Kaynaklar

Bir etki alanına özgü dil kodu oluşturma