System.Runtime.Serialization.DataContractSerializer sınıfı

Bu makale, bu API'nin başvuru belgelerine ek açıklamalar sağlar.

Bir türün DataContractSerializer örneklerini serileştirmek ve seri durumdan çıkarmak için sınıfını bir XML akışında veya belgesinde kullanın. Örneğin, ad ve adres gibi temel verileri içeren özelliklere sahip adlı Person bir tür oluşturabilirsiniz. Daha sonra sınıfın Person bir örneğini oluşturup işleyebilir ve tüm özellik değerlerini daha sonra almak üzere bir XML belgesine veya anında aktarım için bir XML akışına yazabilirsiniz. En önemlisi, DataContractSerializer Windows Communication Foundation (WCF) iletilerinde gönderilen verileri seri hale getirmek ve seri durumdan çıkarmak için kullanılır. Sınıflara özniteliğini DataContractAttribute , DataMemberAttribute seri hale getirilmiş özellikleri ve alanları belirtmek için özniteliğini sınıf üyelerine uygulayın.

Serileştirilebilen türlerin listesi için bkz . Veri Sözleşmesi Seri Hale Getiricisi Tarafından Desteklenen Türler.

kullanmak DataContractSerializeriçin, önce bir sınıfın örneğini ve biçimi yazmaya veya okumaya uygun bir nesne oluşturun; örneğin, örneğin, bir örneği XmlDictionaryWriter. Ardından verileri kalıcı hale getirmek için yöntemini çağırın WriteObject . Verileri almak için, veri biçimini (xml belgesi için gibi XmlDictionaryReader ) okumak için uygun bir nesne oluşturun ve yöntemini çağırın ReadObject .

kullanma DataContractSerializerhakkında daha fazla bilgi için bkz . Serileştirme ve Seri Durumdan Çıkarma.

İstemci uygulaması yapılandırma dosyasında dataContractSerializer öğesini kullanarak <bir veri sözleşmesi seri hale getiricisinin> türünü ayarlayabilirsiniz.

Sınıfları serileştirme veya seri durumdan çıkarma için hazırlama

DataContractSerializer ve sınıfları ile birlikte DataContractAttributeDataMemberAttribute kullanılır. Bir sınıfı serileştirmeye hazırlamak için sınıfına uygulayın DataContractAttribute . Serileştirmek istediğiniz verileri döndüren sınıfın her üyesi için uygulamasını DataMemberAttributeuygulayın. Erişilebilirlik ne olursa olsun alanları ve özellikleri seri hale getirebilirsiniz: özel, korumalı, iç, korumalı iç veya genel.

Örneğin, şemanız özelliği olan bir CustomerID öğesini belirtir, ancak zaten bir özelliğe sahip adlı Person bir tür kullanan mevcut bir Name uygulamanız vardır. Sözleşmeye uygun bir tür oluşturmak için önce sınıfına DataContractAttribute uygulayın. Ardından, DataMemberAttribute serileştirmek istediğiniz her alana veya özelliğe uygulayın.

Not

hem DataMemberAttribute özel hem de genel üyelere uygulayabilirsiniz.

XML'nin son biçimi metin olmamalıdır. Bunun yerine, DataContractSerializer verileri ve tarafından XmlReaderXmlWritertanınan herhangi bir biçime yazmanızı sağlayan bir XML bilgi kümesi olarak yazar. ve sınıflarını XmlDictionaryReaderXmlDictionaryWriter kullanarak okumanız ve yazmanız önerilir çünkü her ikisi de ile DataContractSerializerçalışacak şekilde iyileştirilmiştir.

Serileştirme veya seri durumdan çıkarma gerçekleşmeden önce doldurulması gereken alanları veya özellikleri olan bir sınıf oluşturuyorsanız, Sürüme Dayanıklı Serileştirme Geri Çağırmaları'nda açıklandığı gibi geri çağırma özniteliklerini kullanın.

Bilinen türler koleksiyonuna ekleme

Bir nesneyi seri hale getirdiğinizde veya seri durumdan çıkarırken, türünün için "bilinen" DataContractSerializerolması gerekir. Uygulayan IEnumerable<T> bir sınıfın örneğini oluşturarak (örneğin List<T>) ve bilinen türleri koleksiyona ekleyerek başlayın. Ardından öğesini alan IEnumerable<T> aşırı yüklemelerden birini kullanarak örneğini DataContractSerializer oluşturun (örneğin, DataContractSerializer(Type, IEnumerable<Type>)).

Not

Diğer ilkel türlerden farklı olarak, DateTimeOffset yapı varsayılan olarak bilinen bir tür değildir, bu nedenle bilinen türler listesine el ile eklenmelidir (bkz . Veri Sözleşmesi Bilinen Türleri).

İletme uyumluluğu

, DataContractSerializer sözleşmenin gelecekteki sürümleriyle uyumlu olacak şekilde tasarlanmış veri sözleşmelerini anlar. Bu tür türler arabirimi uygular IExtensibleDataObject . Arabirimi, bir ExtensionDataObject nesne döndüren özelliğine sahiptirExtensionData. Daha fazla bilgi için bkz . İletme Uyumlu Veri Sözleşmeleri.

Kısmi güven altında çalıştır

Seri durumdan çıkarma sırasında hedef nesnenin örneğini oluştururken, DataContractSerializer hedef nesnenin oluşturucusunun çağrılmadığını gösterir. Kısmi güvenden erişilebilen bir [DataContract] türü yazarsanız (yani, ortaktır ve özniteliği uygulanmış bir derlemededir AllowPartiallyTrustedCallers ) ve güvenlikle ilgili bazı eylemler gerçekleştirirse, oluşturucunun çağrılmadığını bilmeniz gerekir. Özellikle aşağıdaki teknikler çalışmaz:

  • Oluşturucuyu iç veya özel hale getirerek ya da oluşturucuya bir LinkDemand ekleyerek kısmi güven erişimini kısıtlamaya çalışırsanız, bunların hiçbiri kısmi güven altında seri durumdan çıkarma sırasında herhangi bir etkiye sahip değildir.
  • Oluşturucunun çalıştırıldığını varsayar sınıfını kodlarsanız, sınıf kötüye kullanılabilir geçersiz bir iç duruma geçebilir.