Öznitelikleri kullanarak XML serileştirmesini denetleme
Makale
Öznitelikler, bir nesnenin XML serileştirmesini denetlemek veya aynı sınıf kümesinden alternatif bir XML akışı oluşturmak için kullanılabilir. Alternatif XML akışı oluşturma hakkında daha fazla bilgi için bkz . Nasıl yapılır: XML Akışı için Alternatif Öğe Adı Belirtme.
Not
Oluşturulan XML'nin Basit Nesne Erişim Protokolü (SOAP) 1.1 başlıklı World Wide Web Consortium (W3C) belgesinin 5. bölümüne uyması gerekiyorsa, Kodlanmış SOAP Serileştirmesini Denetleyen Öznitelikler bölümünde listelenen öznitelikleri kullanın.
Varsayılan olarak, bir XML öğesi adı, sınıf veya üye ada göre belirlenir. adlı Booksınıfta ISBN adlı bir alan, aşağıdaki örnekte gösterildiği gibi bir XML öğesi etiketi <ISBN>oluşturur:
Public Class Book
Public ISBN As String
End Class
' When an instance of the Book class is serialized, it might
' produce this XML:
' <ISBN>1234567890</ISBN>.
C#
publicclassBook
{
publicstring ISBN;
}
// When an instance of the Book class is serialized, it might// produce this XML:// <ISBN>1234567890</ISBN>.
Öğeye yeni bir ad vermek istiyorsanız varsayılan davranış değiştirilebilir. Aşağıdaki kod, bir özniteliğin özelliğini XmlElementAttributeayarlayarak bu işlevselliği nasıl etkinleştirdiği ElementName gösterir:
Public Class TaxRates
< XmlElement(ElementName = "TaxRate")> _
Public ReturnTaxRate As Decimal
End Class
Öznitelikler hakkında daha fazla bilgi için bkz . Öznitelikler. XML serileştirmesini denetleen özniteliklerin listesi için bkz . XML Serileştirmesini Denetleen Öznitelikler.
Dizi Serileştirmesini Denetleme
XmlArrayAttribute ve XmlArrayItemAttribute öznitelikleri dizilerin serileştirmesini denetler. Bu öznitelikleri kullanarak, XML Şema Bölüm 2: Veri Türleri başlıklı W3C belgesinde tanımlandığı gibi öğe adını, ad alanını ve XML Şeması (XSD) veri türünü denetleyebilirsiniz. Bir dizide dahil edilebilir türleri de belirtebilirsiniz.
XmlArrayAttribute Bir dizi serileştirilmiş olduğunda, kapsayan XML öğesi özelliklerini belirler. Örneğin, varsayılan olarak, aşağıdaki dizi serileştirmek adlı bir XML öğesi sonuçlanacak Employees. Employees Öğesi, bir dizi sonra dizi türü adlı öğeleri içerecek Employee.
Public Class Group
Public Employees() As Employee
End Class
Public Class Employee
Public Name As String
End Class
Başka bir kullanımını XmlArrayItemAttribute türetilen sınıfların serileştirmek izin vermektir. Örneğin, adlı başka bir sınıf Manager , türetilen Employee önceki örneği eklenebilir. uygulamazsanız XmlArrayItemAttribute, türetilmiş sınıf türü tanınmayacağından kod çalışma zamanında başarısız olur. Bu sonucu düzeltmek için özniteliğini her kabul edilebilir tür (temel ve türetilmiş) için özelliğini her ayarlayıp Type iki kez uygulayın.
Public Class Group
<XmlArrayItem(Type:=GetType(Employee)), _
XmlArrayItem(Type:=GetType(Manager))> _
Public Employees() As Employee
End Class
Public Class Employee
Public Name As String
End Class
Public Class Manager
Inherits Employee
Public Level As Integer
End Class
İki XML akışını ayırt etmenin bir diğer yolu da XML Şeması Tanımı aracını kullanarak derlenen koddan XML Şeması (XSD) belge dosyalarını oluşturmaktır. Aracı kullanma hakkında daha fazla bilgi için bkz . XML Şema Tanımı Aracı ve XML Serileştirme. Alana hiçbir öznitelik uygulanmadığında şema, öğesini aşağıdaki şekilde açıklar:
ArrayList Sınıfı, farklı nesnelerinin bir koleksiyonu içerebilir. Bu nedenle, diziyi ArrayList kullandığınız kadar çok kullanabilirsiniz. Yazılan nesnelerin bir dizi döndürür bir alan oluşturmak yerine, ancak, tek bir döndüren bir alan oluşturabileceğiniz ArrayList. Ancak, dizilerle gibi sizi bilgilendirmek gerekir XmlSerializer nesneleri türlerinin ArrayList içerir. Bunu gerçekleştirmek için birden çok örneğinin atamak XmlElementAttribute alanına, aşağıdaki örnekte gösterildiği gibi.
Public Class Group
<XmlElement(Type:=GetType(Employee)), _
XmlElement(Type:=GetType(Manager))> _
Public Info As ArrayList
End Class
XmlRootAttribute ve XmlTypeAttribute Kullanarak Sınıfların Serileştirilmesini Denetleme
Yalnızca bir sınıfa iki öznitelik uygulayabilirsiniz: XmlRootAttribute ve XmlTypeAttribute. Bu öznitelikler benzerdir. XmlRootAttribute İçin yalnızca bir sınıf uygulanabilir: sınıf serileştirilmiş olduğunda, temsil eder XML belgesi açma kapatma ve, öğe — diğer bir deyişle, kök öğe. XmlTypeAttribute, Diğer el, kök sınıfı dahil olmak üzere herhangi bir sınıf uygulanabilir.
Örneğin, önceki örneklerde, Group kök sınıfı ve tüm genel alanlar ve Özellikler XML belgesinde bulunan XML öğelerine haline gelir. Bu nedenle, yalnızca bir kök sınıfınız olabilir. uygulayarak XmlRootAttribute, tarafından XmlSerializeroluşturulan XML akışını denetleyebilirsiniz. Örneğin, ad alanı ve öğe adını değiştirebilirsiniz.
, XmlTypeAttribute oluşturulan XML'in şemasını denetlemenize olanak tanır. Bu yetenek şeması XML Web hizmeti aracılığıyla yayımlamak gerektiğinde faydalıdır. Aşağıdaki örnek hem hem de XmlTypeAttribute aynı XmlRootAttribute sınıfa uygulanır:
<XmlRoot("NewGroupName"), _
XmlType("NewTypeName")> _
Public Class Group
Public Employees() As Employee
End Class
C#
[XmlRoot("NewGroupName")]
[XmlType("NewTypeName")]
publicclassGroup {
public Employee[] Employees;
}
Bu sınıf derlenmişse ve şemasını oluşturmak için XML Şema Tanımı aracı kullanılıyorsa, aşağıdaki XML'yi açıklarken Groupbulursunuz:
Buna karşılık, sınıfın bir örneğini seri hale getirmek istiyorsanız, yalnızca NewGroupName XML belgesinde bulunabilir:
XML
<NewGroupName>
. . .
</NewGroupName>
XmlIgnoreAttribute ile Serileştirmeyi Önleme
Ortak bir özelliğin veya alanın seri hale getirilmeye gerek olmadığı bir durumla karşılaşabilirsiniz. Örneğin, bir alan veya özellik meta veriler içeren için kullanılabilir. Böyle durumlarda, uygulama XmlIgnoreAttribute alanı veya özelliği için ve XmlSerializer üzerine atlar.
Bu içeriğin kaynağı GitHub'da bulunabilir; burada ayrıca sorunları ve çekme isteklerini oluşturup gözden geçirebilirsiniz. Daha fazla bilgi için katkıda bulunan kılavuzumuzu inceleyin.
.NET geri bildirimi
.NET, açık kaynak bir projedir. Geri bildirim sağlamak için bir bağlantı seçin:
Diğer geliştiriciler ve uzmanlarla gerçek dünyadaki kullanım örneklerini temel alan ölçeklenebilir yapay zeka çözümleri oluşturmak için toplantı serisine katılın.
Statik sınıflar, kısmi sınıflar ve kodunuzun okunabilirliğini, sürdürülebilirliğini ve düzenlemesini geliştirebilen nesne başlatıcılar gibi gelişmiş teknikleri kullanarak sınıfları uygulamayı öğrenin.