Obsolescencia de SerializationFormat.Binary
SerializationFormat.Binary está obsoleto para DataTable y DataSet. La serialización binaria se basa en BinaryFormatter, que no es seguro. Si usa SerializationFormat.Binary en el código, se generará la advertencia de obsolescencia SYSLIB0038 en tiempo de compilación.
Además, se produce una excepción InvalidEnumArgumentException en tiempo de ejecución si ocurre lo siguiente:
- Se establece DataSet.RemotingFormat en DataTable.RemotingFormat o SerializationFormat.Binary.
- Se llama a uno de los constructores de deserialización para DataTable o DataSet con datos binarios.
Comportamiento anterior
Anteriormente, DataTable y DataSet se podían serializar y deserializar con su propiedad RemotingFormat establecida en SerializationFormat.Binary, que usaba BinaryFormatter en segundo plano.
Comportamiento nuevo
A partir de .NET 7, si intenta serializar o deserializar DataTable y DataSet con su propiedad RemotingFormat establecida en SerializationFormat.Binary, se produce una excepción InvalidEnumArgumentException.
Versión introducida
.NET 7
Tipo de cambio importante
Este cambio puede afectar a la compatibilidad de origen y la compatibilidad binaria.
Motivo del cambio
SerializationFormat.Binary se implementa mediante BinaryFormatter, que no es seguro y está obsoleto en toda la pila de .NET.
Acción recomendada
Si el código usa SerializationFormat.Binary, cambie al uso de SerializationFormat.Xml o emplee otro método de serialización.
De lo contrario, puede establecer el modificador Switch.System.Data.AllowUnsafeSerializationFormatBinary
AppContext. Este modificador le permite participar en el uso de SerializationFormat.Binary, para que el código pueda funcionar como antes. Sin embargo, este modificador se eliminará de .NET 8. Para obtener información sobre cómo establecer el modificador, consulte AppContext para consumidores de bibliotecas.
API afectadas
- System.Data.SerializationFormat.Binary
- DataSet.RemotingFormat
- DataTable.RemotingFormat
- DataSet(SerializationInfo, StreamingContext)
- DataSet(SerializationInfo, StreamingContext, Boolean)
- DataTable(SerializationInfo, StreamingContext)