Veri Sözleşmesi Seri Hale Getirici Tarafından Desteklenen Türler
Windows Communication Foundation (WCF), verileri XML'ye dönüştürmek ve XML'yi yeniden verilere dönüştürmek için varsayılan serileştirme altyapısı olarak öğesini kullanır DataContractSerializer . DataContractSerializer, veri sözleşmesi türlerini serileştirmek için tasarlanmıştır. Ancak, örtük bir veri sözleşmesine sahip olduğu düşünülebilecek diğer birçok türü destekler. Aşağıda, serileştirilebilen türlerin tam listesi yer alıyor:
Parametreleri olmayan bir oluşturucuya sahip genel olarak görünen tüm türler.
Veri sözleşmesi türleri. Bunlar, özniteliğinin DataContractAttribute uygulandığı türlerdir. İş nesnelerini temsil eden yeni özel türler normalde veri sözleşmesi türleri olarak oluşturulmalıdır. Daha fazla bilgi için bkz . Veri Sözleşmelerini ve Seri Hale Getirilebilir Türleri Kullanma.
Koleksiyon türleri. Bunlar, veri listelerini temsil eden türlerdir. Bunlar, ve gibi ArrayListDictionary<TKey,TValue>normal tür dizileri veya koleksiyon türleri olabilir. CollectionDataContractAttribute özniteliği, bu türlerin seri hale getirilmesini özelleştirmek için kullanılabilir, ancak gerekli değildir. Daha fazla bilgi için bkz . Veri Sözleşmelerinde Koleksiyon Türleri.
Numaralandırma türleri. Bayrak numaralandırmaları da dahil olmak üzere numaralandırmalar serileştirilebilir. İsteğe bağlı olarak, numaralandırma türleri özniteliğiyle DataContractAttribute işaretlenebilir ve bu durumda serileştirmeye katılan her üye özniteliğiyle EnumMemberAttribute işaretlenmelidir. İşaretlenmemiş üyeler serileştirilmemiştir. Daha fazla bilgi için bkz . Veri Sözleşmelerinde Numaralandırma Türleri.
.NET Framework temel türleri. .NET Framework'de yerleşik olarak bulunan aşağıdaki türlerin tümü seri hale getirilebilir ve ilkel türler olarak kabul edilir: , , , , , UInt64DecimalSingleCharObjectBooleanDoubleUInt32Int64UInt16ve .StringInt32Int16SByteByte
Diğer ilkel türler. Bu türler .NET Framework'teki ilkel öğeler değildir, ancak serileştirilmiş XML formunda ilkel öğeler olarak değerlendirilir. Bu türler DateTime, , DateTimeOffsetTimeSpan, Guid, Uri, , XmlQualifiedNameve dizileridirByte.
Not
Diğer ilkel türlerin aksine, DateTimeOffset varsayılan olarak bilinen bir tür değildir. Daha fazla bilgi için bkz . Veri Sözleşmesi Bilinen Türleri).
özniteliğiyle SerializableAttribute işaretlenmiş türler. .NET Framework temel sınıf kitaplığına dahil edilen birçok tür bu kategoriye girer. arabirimi DataContractSerializer desteği dahil olmak üzere ISerializable .NET Framework uzaktan iletişim, BinaryFormatter, ve SoapFormattertarafından kullanılan bu serileştirme programlama modelini tam olarak destekler.
Ham XML'i temsil eden türler veya ADO.NET ilişkisel verileri temsil eden türler. XmlElement ve türleri dizisi, XML'yi XmlNode doğrudan temsil etmenin bir yolu olarak desteklenir. Ayrıca, arabirimini uygulayan IXmlSerializable türler, ilgili XmlSchemaProviderAttribute öznitelik ve ve XDocumentXElement türleri de dahil olmak üzere desteklenir. ADO.NETDataTable türü ve DataSet türü (ve türü türetilmiş sınıfları) arabirimi uygular IXmlSerializable ve bu nedenle bu kategoriye sığar. Daha fazla bilgi için bkz . Veri Sözleşmelerinde XML ve ADO.NET Türleri.
Kısmi Güven Modunda Belirli Türleri Kullanma Sınırlamaları
Kısmi güven modu senaryolarında belirli türlerin kullanılmasıyla ilgili sınırlamaların listesi aşağıdadır:
kullanarak DataContractSerializer kısmen güvenilen kodda uygulanan ISerializable bir türü seri hale getirmek veya seri durumdan SerializationFormatter çıkarmak için ve UnmanagedCode izinleri gerekir.
WCF kodu Kısmi Güven modunda çalıştırılırken, alanların seri hale getirilmesi ve seri durumdan
readonly
çıkarılması (hem hem deprivate
public
) desteklenmez. Bunun nedeni, oluşturulan IL'nin geri alınamaz olması ve bu nedenle yükseltilmiş izinler gerektirmesidir.DataContractSerializer hem ve XmlSerializer hem de kısmi bir güven ortamında desteklenir. Ancak, kullanımı DataContractSerializer aşağıdaki koşullara tabidir:
Tüm serileştirilebilir
[DataContract]
türler genel olmalıdır.Bir
[DataContract]
türdeki tüm serileştirilebilir[DataMember]
alanlar veya özellikler genel ve okuma/yazma olmalıdır. Kısmen güvenilen bir uygulamada WCF çalıştırılırken alanların seri hale getirilmesi ve seri durumdanreadonly
çıkarılması desteklenmez.Programlama
[Serializable]
/ISerializable]
modeli kısmi güven ortamında desteklenmez.Bilinen türler kod veya makine düzeyi yapılandırmasında (
Machine.config
belirtilmelidir). Bilinen türler, güvenlik nedeniyle uygulama düzeyi yapılandırmasında belirtilemez.
yöntemi güvenlik izni
[SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)]
gerektirdiğindenGetRealObject, uygulayan IObjectReference türler kısmen güvenilen bir ortamda özel durum oluşturur.
Serileştirme hakkında Ek Notlar
Aşağıdaki kurallar, Veri Sözleşmesi Seri Hale Getiricisi tarafından desteklenen türler için de geçerlidir:
Genel türler, veri sözleşmesi seri hale getiricisi tarafından tam olarak desteklenir.
Null atanabilir değer türleri, veri sözleşmesi seri hale getiricisi tarafından tam olarak desteklenir.
Arabirim türleri, koleksiyon arabirimleri söz konusu olduğunda koleksiyon türleri olarak veya olarak Object değerlendirilir.
Hem yapılar hem de sınıflar desteklenir.
ve DataContractSerializer ASP.NET Web hizmetleri tarafından XmlSerializer kullanılan programlama modelini desteklemez. Özellikle ve XmlAttributeAttributegibi XmlElementAttribute öznitelikleri desteklemez. Bu programlama modeli için desteği etkinleştirmek için WCF yerine kullanmak XmlSerializerDataContractSerializerüzere değiştirilmelidir.
Türü DBNull özel bir şekilde işlenir. Bu tekil bir türdür ve seri durumdan çıkarılırken seri durumdan çıkarıcı tekil kısıtlamaya dikkat eder ve tüm
DBNull
başvuruları tekil örneğe işaret eder.DBNull
Serileştirilebilir bir tür olduğundan, izin gerektirirSerializationFormatter.