Aracılığıyla paylaş


DataContractSerializer'a (XML) geçiş

.NET temel sınıf kitaplıkları iki XML serileştiricisi sağlar: XmlSerializer ve DataContractSerializer. Bu ikisi arasında bazı küçük farklar vardır, ancak geçiş amacıyla bu bölüm yalnızca öğesine DataContractSerializerodaklanır. Neden? tarafından BinaryFormatterkullanılan serileştirme programlama modelini tam olarak desteklediğinden. Olarak [Serializable] işaretlenmiş veya uygulanmış ISerializable olan tüm türler ile DataContractSerializerseri hale getirilebilir. Av nerede? Bilinen türler önceden belirtilmelidir. Bunları bilmeniz ve özel türlerTypealabilmeniz gerekir.

veya gibi stringDateTime en popüler koleksiyonları veya ilkel türleri belirtmek gerekmez (seri hale getiricinin kendi varsayılan izin verme listesi vardır), ancak gibi DateTimeOffsetözel durumlar vardır. Desteklenen türler hakkında daha fazla bilgi için bkz . Veri sözleşmesi seri hale getiricisi tarafından desteklenen türler.

Kısmi güven , .NET'e (Core) taşımamış bir .NET Framework özelliğidir. Kodunuz .NET Framework üzerinde çalışıyorsa ve bu özelliği kullanıyorsa, bu tür bir senaryo için geçerli olabilecek sınırlamalar hakkında bilgi edinin.

Adım adım geçiş

  1. tüm kullanımlarını BinaryFormatterbulun.
  2. Değişikliklerinizi doğrulayabilmeniz ve hatalardan kaçınabilmeniz için serileştirme kodu yollarının testlerle kapsandığından emin olun.
  3. .NET core kitaplıklarının bir parçası olarak DataContractSerializer herhangi bir paket yüklemeniz gerekmez.
  4. ile BinaryFormatterseri hale getirilen tüm türleri bulun. Bunların hiçbirini değiştirmeniz gerekmez, ancak oluşturucunun knownTypes bağımsız değişkeni aracılığıyla DataContractSerializer bunları listelemeniz gerekebilir.
  5. öğesinin kullanımını BinaryFormatter ile DataContractSerializerdeğiştirin.
DataContractSerializer serializer = new(
    type: input.GetType(),
    knownTypes: new Type[]
    {
        typeof(MyType1),
        typeof(MyType2)
    });