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
dsl tanımını açın.dsl Explorer'da Editor düğümünü tıklatın.
Properties penceresinde, Düzen DosyaUzantısı özelliği.İlk eklemeyin "." dosya adı uzantısı.
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.
Bu dsl ekranda aşağıdaki görünüme sahip bir model oluşturmak için kullanıldı.
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
Emin olun Takma ad anahtarında olan false her etki alanı özellik sınıfı ve onun temel sınıflar için.
dsl Explorer'da genişletin Xml seri hale getirme Behavior\Class Data\< etki alanı > sınıfı**\Element veri**.
Emin olun Takma ad anahtarında olan false her etki alanı özelliği.
Etki alanı sınıfın temel bir sınıf varsa, o sınıftaki yordamı yineleyin.
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.
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.
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.
Yinelenen 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.
Takma 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
Set Olan özel düğümü altında o sınıf için de Xml seri hale getirme davranış.
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.
XML 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ı |
XML ö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ı |
XML 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