Migración a DataContractSerializer (XML)
Las bibliotecas de clases base de .NET proporcionan dos serializadores XML: XmlSerializer y DataContractSerializer. Hay algunas diferencias sutiles entre estos dos, pero para el propósito de la migración, esta sección se centra solo en DataContractSerializer
. ¿Por qué? Dado que es totalmente compatible con el modelo de programación de serialization que se utilizó en BinaryFormatter
. Todos los tipos que ya están marcados como [Serializable]
o implementados ISerializable
se pueden serializar con DataContractSerializer
. ¿Dónde está la trampa? Los tipos conocidos deben especificarse por adelantado. Debe conocerlos y poder obtener Type
, incluso para tipos privados.
No es necesario especificar colecciones más populares o tipos primitivos como string
o DateTime
(el serializador tiene su propia lista de permitidos predeterminada), pero hay excepciones como DateTimeOffset
. Para obtener más información sobre los tipos admitidos, vea Tipos admitidos por el serializador de contratos de datos.
La confianza parcial es una característica de .NET Framework que no se ha migrado a .NET (Core). Si el código se ejecuta en .NET Framework y usa esta característica, lea las limitaciones que podrían aplicarse a este escenario.
Migración paso a paso
- Busque todos los usos de
BinaryFormatter
. - Asegúrese de que las rutas de acceso al código serialization estén cubiertas con pruebas, para que pueda verificar los cambios y evitar la introducción de errores.
- No es necesario instalar ningún paquete, ya que
DataContractSerializer
forma parte de las bibliotecas de .NET Core. - Busque todos los tipos que se serializan con
BinaryFormatter
. No es necesario modificar ninguno de ellos, pero es posible que tenga que enumerarlos a través del argumentoknownTypes
del constructorDataContractSerializer
. - Reemplace el uso de
BinaryFormatter
porDataContractSerializer
.
DataContractSerializer serializer = new(
type: input.GetType(),
knownTypes: new Type[]
{
typeof(MyType1),
typeof(MyType2)
});