Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
NetDcSasDcSwithDCR örneği, DataContractSerializer kullanımının uygun DataContractResolver ile NetDataContractSerializer ile aynı işlevselliği nasıl sağladığını gösterir. Bu örnek, nasıl uygun DataContractResolver oluşturulacağını ve bunun DataContractSerializer öğesine nasıl ekleneceğini gösterir.
Örnek ayrıntılar
NetDataContractSerializer, DataContractSerializer bir önemli şekilde farklıdır: NetDataContractSerializer, serileştirilmiş XML'de CLR tür bilgilerini içerirken, ancak DataContractSerializer'te bu bilgi yoktur. Bu nedenle, NetDataContractSerializer yalnızca seri hale getirme ve seri durumdan çıkarma uçlarının aynı CLR türlerini paylaşması durumunda kullanılabilir. Ancak DataContractSerializer, performansı NetDataContractSerializer'den daha iyi olduğu için önerilir. seri hale getirilmiş DataContractSerializer bilgileri, buna bir DataContractResolver ekleyerek değiştirebilirsiniz.
Bu örnek iki projeden oluşur. İlk proje, bir nesneyi seri hale getirmek için kullanır NetDataContractSerializer . İkinci proje, ilk projeyle aynı işlevselliği sağlamak için DataContractSerializer ve DataContractResolver kullanır.
DCSwithDCR projesinde, DataContractResolver öğesine eklenen, MyDataContractResolver adlı özel bir DataContractSerializer uygulamasının nasıl gerçekleştirildiğini gösteren aşağıdaki kod örneği.
class MyDataContractResolver : DataContractResolver
{
private XmlDictionary dictionary = new XmlDictionary();
public MyDataContractResolver()
{
}
// Used at deserialization
// Allows users to map xsi:type name to any Type
public override Type ResolveName(string typeName, string typeNamespace, DataContractResolver knownTypeResolver)
{
Type type = knownTypeResolver.ResolveName(typeName, typeNamespace, null);
type ??= Type.GetType(typeName + ", " + typeNamespace);
return type;
}
// Used at serialization
// Maps any Type to a new xsi:type representation
public override void ResolveType(Type dataContractType, DataContractResolver knownTypeResolver, out XmlDictionaryString typeName, out XmlDictionaryString typeNamespace)
{
knownTypeResolver.ResolveType(dataContractType, null, out typeName, out typeNamespace);
if (typeName == null || typeNamespace == null)
{
XmlDictionary dictionary = new XmlDictionary();
typeName = dictionary.Add(dataContractType.FullName);
typeNamespace = dictionary.Add(dataContractType.Assembly.FullName);
}
}
}
Bu örneği kullanmak için
Visual Studio'yu kullanarak DCRSample.sln çözüm dosyasını açın.
Çözüm dosyasına sağ tıklayın ve Özellikler'i seçin.
Çözüm Özellik Sayfaları iletişim kutusundaki Ortak Özellikler, Başlangıç Projesi'nin altında Birden çok başlangıç projesi: öğesini seçin.
DCSwithDCR projesinin yanındaki Eylem açılır menüsünden Başlat'ı seçin.
NetDCS projesinin yanındaki Başlat'ı, Eylem açılır listesinden seçin.
İletişim kutusunu kapatmak için Tamam'a tıklayın.
Çözümü oluşturmak için Ctrl+ ShiftB+ basın.
Çözümü çalıştırmak için CtrlF5+ basın.