Serialización binaria

La serialización se puede definir como el proceso de almacenar el estado de un objeto a los medios de almacenamiento. Durante este proceso, los campos públicos y privados del objeto y el nombre de la clase, incluso el ensamblado que contiene la clase, se convierten en una secuencia de bytes, que se escribe a continuación en un flujo de datos. Cuando se deserializa el objeto como consecuencia, se crea un clon exacto del objeto original.

Al implementar un mecanismo de la serialización en un entorno orientado a objetos, tiene que realizar varios intercambios entre la facilidad de uso y la flexibilidad. El proceso se puede automatizar en gran medida, con tal de que sea proporcionado el control suficiente sobre el proceso. Por ejemplo, las situaciones se pueden presentar donde la serialización binaria simple no es suficiente, o podría haber una razón concreta para decidir qué campos en una clase necesitan ser serializados. Las secciones siguientes examinan el sólido mecanismo de serialización proporcionado con .NET y resaltan varias características importantes que permiten personalizar el proceso para satisfacer las necesidades.

Nota:

El estado de un objeto UTF-8 o UTF-7 codificado no se conserva si el objeto se serializa y se deserializa utilizando distintas versiones de .NET.

Advertencia

La serialización binaria puede ser peligrosa. Para más información, consulte Guía de seguridad de BinaryFormatter.

La serialización binaria permite modificar miembros privados dentro de un objeto y, por tanto, cambiar su estado. Por este motivo, se recomiendan otros marcos de serialización, como System.Text.Json, que operan en la superficie de la API pública.

.NET Core

.NET Core admite la serialización binaria para un subconjunto de tipos. Puede ver la lista de tipos compatibles en la sección Tipos serializables siguiente. Se garantiza que los tipos indicados son serializables entre .NET Framework 4.5.1 y versiones posteriores, y entre .NET Core 2.0 y versiones posteriores. Otras implementaciones de .NET, como Mono, no son oficialmente compatibles, pero también deberían funcionar.

Tipos serializables

Tipo Notas
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException A partir de .NET Core 2.0.4.
Microsoft.CSharp.RuntimeBinder.RuntimeBinderInternalCompilerException A partir de .NET Core 2.0.4.
System.AccessViolationException A partir de .NET Core 2.0.4.
System.AggregateException A partir de .NET Core 2.0.4.
System.AppDomainUnloadedException A partir de .NET Core 2.0.4.
System.ApplicationException A partir de .NET Core 2.0.4.
System.ArgumentException A partir de .NET Core 2.0.4.
System.ArgumentNullException A partir de .NET Core 2.0.4.
System.ArgumentOutOfRangeException A partir de .NET Core 2.0.4.
System.ArithmeticException A partir de .NET Core 2.0.4.
System.Array
System.ArraySegment<T>
System.ArrayTypeMismatchException A partir de .NET Core 2.0.4.
System.Attribute
System.BadImageFormatException A partir de .NET Core 2.0.4.
System.Boolean
System.Byte
System.CannotUnloadAppDomainException A partir de .NET Core 2.0.4.
System.Char
System.Collections.ArrayList
System.Collections.BitArray
System.Collections.Comparer
System.Collections.DictionaryEntry
System.Collections.Generic.Comparer<T>
System.Collections.Generic.Dictionary<TKey,TValue>
System.Collections.Generic.EqualityComparer<T>
System.Collections.Generic.HashSet<T>
System.Collections.Generic.KeyNotFoundException A partir de .NET Core 2.0.4.
System.Collections.Generic.KeyValuePair<TKey,TValue>
System.Collections.Generic.LinkedList<T>
System.Collections.Generic.List<T>
System.Collections.Generic.Queue<T>
System.Collections.Generic.SortedDictionary<TKey,TValue>
System.Collections.Generic.SortedList<TKey,TValue>
System.Collections.Generic.SortedSet<T>
System.Collections.Generic.Stack<T>
System.Collections.Hashtable
System.Collections.ObjectModel.Collection<T>
System.Collections.ObjectModel.KeyedCollection<TKey,TItem>
System.Collections.ObjectModel.ObservableCollection<T>
System.Collections.ObjectModel.ReadOnlyCollection<T>
System.Collections.ObjectModel.ReadOnlyDictionary<TKey,TValue>
System.Collections.ObjectModel.ReadOnlyObservableCollection<T>
System.Collections.Queue
System.Collections.SortedList
System.Collections.Specialized.HybridDictionary
System.Collections.Specialized.ListDictionary
System.Collections.Specialized.OrderedDictionary
System.Collections.Specialized.StringCollection
System.Collections.Specialized.StringDictionary
System.Collections.Stack
System.Collections.Generic.NonRandomizedStringEqualityComparer A partir de .NET Core 2.0.4.
System.ComponentModel.BindingList<T>
System.ComponentModel.DataAnnotations.ValidationException A partir de .NET Core 2.0.4.
System.ComponentModel.Design.CheckoutException A partir de .NET Core 2.0.4.
System.ComponentModel.InvalidAsynchronousStateException A partir de .NET Core 2.0.4.
System.ComponentModel.InvalidEnumArgumentException A partir de .NET Core 2.0.4.
System.ComponentModel.LicenseException A partir de .NET Core 2.0.4.
No se admite la serialización desde .NET Framework a .NET Core.
System.ComponentModel.WarningException A partir de .NET Core 2.0.4.
System.ComponentModel.Win32Exception A partir de .NET Core 2.0.4.
System.Configuration.ConfigurationErrorsException A partir de .NET Core 2.0.4.
System.Configuration.ConfigurationException A partir de .NET Core 2.0.4.
System.Configuration.Provider.ProviderException A partir de .NET Core 2.0.4.
System.Configuration.SettingsPropertyIsReadOnlyException A partir de .NET Core 2.0.4.
System.Configuration.SettingsPropertyNotFoundException A partir de .NET Core 2.0.4.
System.Configuration.SettingsPropertyWrongTypeException A partir de .NET Core 2.0.4.
System.ContextMarshalException A partir de .NET Core 2.0.4.
System.DBNull A partir de .NET Core 2.0.2 y versiones posteriores.
System.Data.Common.DbException A partir de .NET Core 2.0.4.
System.Data.ConstraintException A partir de .NET Core 2.0.4.
System.Data.DBConcurrencyException A partir de .NET Core 2.0.4.
System.Data.DataException A partir de .NET Core 2.0.4.
System.Data.DataSet
System.Data.DataTable Si establece RemotingFormat en SerializationFormat.Binary, solo se puede intercambiar con .NET Core 2.1 y versiones posteriores.
System.Data.DeletedRowInaccessibleException A partir de .NET Core 2.0.4.
System.Data.DuplicateNameException A partir de .NET Core 2.0.4.
System.Data.EvaluateException A partir de .NET Core 2.0.4.
System.Data.InRowChangingEventException A partir de .NET Core 2.0.4.
System.Data.InvalidConstraintException A partir de .NET Core 2.0.4.
System.Data.InvalidExpressionException A partir de .NET Core 2.0.4.
System.Data.MissingPrimaryKeyException A partir de .NET Core 2.0.4.
System.Data.NoNullAllowedException A partir de .NET Core 2.0.4.
System.Data.Odbc.OdbcException A partir de .NET Core 2.0.4.
System.Data.OperationAbortedException A partir de .NET Core 2.0.4.
System.Data.PropertyCollection
System.Data.ReadOnlyException A partir de .NET Core 2.0.4.
System.Data.RowNotInTableException A partir de .NET Core 2.0.4.
System.Data.SqlClient.SqlException A partir de .NET Core 2.0.4.
No se admite la serialización desde .NET Framework a .NET Core
System.Data.SqlTypes.SqlAlreadyFilledException A partir de .NET Core 2.0.4.
System.Data.SqlTypes.SqlBoolean
System.Data.SqlTypes.SqlByte
System.Data.SqlTypes.SqlDateTime
System.Data.SqlTypes.SqlDouble
System.Data.SqlTypes.SqlGuid
System.Data.SqlTypes.SqlInt16
System.Data.SqlTypes.SqlInt32
System.Data.SqlTypes.SqlInt64
System.Data.SqlTypes.SqlNotFilledException A partir de .NET Core 2.0.4.
System.Data.SqlTypes.SqlNullValueException A partir de .NET Core 2.0.4.
System.Data.SqlTypes.SqlString
System.Data.SqlTypes.SqlTruncateException A partir de .NET Core 2.0.4.
System.Data.SqlTypes.SqlTypeException A partir de .NET Core 2.0.4.
System.Data.StrongTypingException A partir de .NET Core 2.0.4.
System.Data.SyntaxErrorException A partir de .NET Core 2.0.4.
System.Data.VersionNotFoundException A partir de .NET Core 2.0.4.
System.DataMisalignedException A partir de .NET Core 2.0.4.
System.DateTime
System.DateTimeOffset
System.Decimal
System.Diagnostics.Contracts.ContractException A partir de .NET Core 2.0.4.
System.Diagnostics.Tracing.EventSourceException A partir de .NET Core 2.0.4.
System.IO.DirectoryNotFoundException A partir de .NET Core 2.0.4.
System.DirectoryServices.AccountManagement.MultipleMatchesException A partir de .NET Core 2.0.4.
System.DirectoryServices.AccountManagement.NoMatchingPrincipalException A partir de .NET Core 2.0.4.
System.DirectoryServices.AccountManagement.PasswordException A partir de .NET Core 2.0.4.
System.DirectoryServices.AccountManagement.PrincipalException A partir de .NET Core 2.0.4.
System.DirectoryServices.AccountManagement.PrincipalExistsException A partir de .NET Core 2.0.4.
System.DirectoryServices.AccountManagement.PrincipalOperationException A partir de .NET Core 2.0.4.
System.DirectoryServices.AccountManagement.PrincipalServerDownException A partir de .NET Core 2.0.4.
System.DirectoryServices.ActiveDirectory.ActiveDirectoryObjectExistsException A partir de .NET Core 2.0.4.
System.DirectoryServices.ActiveDirectory.ActiveDirectoryObjectNotFoundException A partir de .NET Core 2.0.4.
System.DirectoryServices.ActiveDirectory.ActiveDirectoryOperationException A partir de .NET Core 2.0.4.
System.DirectoryServices.ActiveDirectory.ActiveDirectoryServerDownException A partir de .NET Core 2.0.4.
System.DirectoryServices.ActiveDirectory.ForestTrustCollisionException A partir de .NET Core 2.0.4.
System.DirectoryServices.ActiveDirectory.SyncFromAllServersOperationException A partir de .NET Core 2.0.4.
System.DirectoryServices.DirectoryServicesCOMException A partir de .NET Core 2.0.4.
System.DirectoryServices.Protocols.BerConversionException A partir de .NET Core 2.0.4.
System.DirectoryServices.Protocols.DirectoryException A partir de .NET Core 2.0.4.
System.DirectoryServices.Protocols.DirectoryOperationException A partir de .NET Core 2.0.4.
System.DirectoryServices.Protocols.LdapException A partir de .NET Core 2.0.4.
System.DirectoryServices.Protocols.TlsOperationException A partir de .NET Core 2.0.4.
System.DivideByZeroException A partir de .NET Core 2.0.4.
System.DllNotFoundException A partir de .NET Core 2.0.4.
System.Double
System.Drawing.Bitmap A partir de .NET Core 3.0
System.Drawing.Color
System.Drawing.Icon A partir de .NET Core 3.0
System.Drawing.Image A partir de .NET Core 3.0
System.Drawing.Imaging.Metafile A partir de .NET Core 3.0
System.Drawing.Point
System.Drawing.PointF
System.Drawing.Rectangle
System.Drawing.RectangleF
System.Drawing.Size
System.Drawing.SizeF
System.DuplicateWaitObjectException A partir de .NET Core 2.0.4.
System.EntryPointNotFoundException A partir de .NET Core 2.0.4.
System.Enum
System.EventArgs A partir de .NET Core 2.0.6.
System.Exception
System.ExecutionEngineException A partir de .NET Core 2.0.4.
System.FieldAccessException A partir de .NET Core 2.0.4.
System.FormatException A partir de .NET Core 2.0.4.
System.Globalization.CompareInfo
System.Globalization.CultureNotFoundException A partir de .NET Core 2.0.4.
System.Globalization.SortVersion
System.Guid
System.IO.Compression.ZLibException A partir de .NET Core 2.0.4.
System.IO.DriveNotFoundException A partir de .NET Core 2.0.4.
System.IO.EndOfStreamException A partir de .NET Core 2.0.4.
System.IO.FileFormatException A partir de .NET Core 2.0.4.
System.IO.FileLoadException A partir de .NET Core 2.0.4.
System.IO.FileNotFoundException A partir de .NET Core 2.0.4.
System.IO.IOException A partir de .NET Core 2.0.4.
System.IO.InternalBufferOverflowException A partir de .NET Core 2.0.4.
System.IO.InvalidDataException A partir de .NET Core 2.0.4.
System.IO.IsolatedStorage.IsolatedStorageException A partir de .NET Core 2.0.4.
System.IO.PathTooLongException A partir de .NET Core 2.0.4.
System.IndexOutOfRangeException A partir de .NET Core 2.0.4.
System.InsufficientExecutionStackException A partir de .NET Core 2.0.4.
System.InsufficientMemoryException A partir de .NET Core 2.0.4.
System.Int16
System.Int32
System.Int64
System.IntPtr
System.InvalidCastException A partir de .NET Core 2.0.4.
System.InvalidOperationException A partir de .NET Core 2.0.4.
System.InvalidProgramException A partir de .NET Core 2.0.4.
System.InvalidTimeZoneException A partir de .NET Core 2.0.4.
System.MemberAccessException A partir de .NET Core 2.0.4.
System.MethodAccessException A partir de .NET Core 2.0.4.
System.MissingFieldException A partir de .NET Core 2.0.4.
System.MissingMemberException A partir de .NET Core 2.0.4.
System.MissingMethodException A partir de .NET Core 2.0.4.
System.MulticastNotSupportedException A partir de .NET Core 2.0.4.
System.Net.Cookie
System.Net.CookieCollection
System.Net.CookieContainer
System.Net.CookieException A partir de .NET Core 2.0.4.
System.Net.HttpListenerException A partir de .NET Core 2.0.4.
System.Net.Mail.SmtpException A partir de .NET Core 2.0.4.
System.Net.Mail.SmtpFailedRecipientException A partir de .NET Core 2.0.4.
System.Net.Mail.SmtpFailedRecipientsException A partir de .NET Core 2.0.4.
System.Net.NetworkInformation.NetworkInformationException A partir de .NET Core 2.0.4.
System.Net.NetworkInformation.PingException A partir de .NET Core 2.0.4.
System.Net.ProtocolViolationException A partir de .NET Core 2.0.4.
System.Net.Sockets.SocketException A partir de .NET Core 2.0.4.
System.Net.WebException A partir de .NET Core 2.0.4.
System.Net.WebSockets.WebSocketException A partir de .NET Core 2.0.4.
System.NotFiniteNumberException A partir de .NET Core 2.0.4.
System.NotImplementedException A partir de .NET Core 2.0.4.
System.NotSupportedException A partir de .NET Core 2.0.4.
System.NullReferenceException A partir de .NET Core 2.0.4.
System.Nullable<T>
System.Numerics.BigInteger
System.Numerics.Complex
System.Object
System.ObjectDisposedException A partir de .NET Core 2.0.4.
System.OperationCanceledException A partir de .NET Core 2.0.4.
System.OutOfMemoryException A partir de .NET Core 2.0.4.
System.OverflowException A partir de .NET Core 2.0.4.
System.PlatformNotSupportedException A partir de .NET Core 2.0.4.
System.RankException A partir de .NET Core 2.0.4.
System.Reflection.AmbiguousMatchException A partir de .NET Core 2.0.4.
System.Reflection.CustomAttributeFormatException A partir de .NET Core 2.0.4.
System.Reflection.InvalidFilterCriteriaException A partir de .NET Core 2.0.4.
System.Reflection.ReflectionTypeLoadException A partir de .NET Core 2.0.4.
No se admite la serialización desde .NET Framework a .NET Core.
System.Reflection.TargetException A partir de .NET Core 2.0.4.
System.Reflection.TargetInvocationException A partir de .NET Core 2.0.4.
System.Reflection.TargetParameterCountException A partir de .NET Core 2.0.4.
System.Resources.MissingManifestResourceException A partir de .NET Core 2.0.4.
System.Resources.MissingSatelliteAssemblyException A partir de .NET Core 2.0.4.
System.Runtime.CompilerServices.RuntimeWrappedException A partir de .NET Core 2.0.4.
System.Runtime.InteropServices.COMException A partir de .NET Core 2.0.4.
System.Runtime.InteropServices.ExternalException A partir de .NET Core 2.0.4.
System.Runtime.InteropServices.InvalidComObjectException A partir de .NET Core 2.0.4.
System.Runtime.InteropServices.InvalidOleVariantTypeException A partir de .NET Core 2.0.4.
System.Runtime.InteropServices.MarshalDirectiveException A partir de .NET Core 2.0.4.
System.Runtime.InteropServices.SEHException A partir de .NET Core 2.0.4.
System.Runtime.InteropServices.SafeArrayRankMismatchException A partir de .NET Core 2.0.4.
System.Runtime.InteropServices.SafeArrayTypeMismatchException A partir de .NET Core 2.0.4.
System.Runtime.Serialization.InvalidDataContractException A partir de .NET Core 2.0.4.
System.Runtime.Serialization.SerializationException A partir de .NET Core 2.0.4.
System.SByte
System.Security.AccessControl.PrivilegeNotHeldException A partir de .NET Core 2.0.4.
System.Security.Authentication.AuthenticationException A partir de .NET Core 2.0.4.
System.Security.Authentication.InvalidCredentialException A partir de .NET Core 2.0.4.
System.Security.Cryptography.CryptographicException A partir de .NET Core 2.0.4.
System.Security.Cryptography.CryptographicUnexpectedOperationException A partir de .NET Core 2.0.4.
System.Security.Cryptography.Xml.CryptoSignedXmlRecursionException A partir de .NET Core 2.0.4.
System.Security.HostProtectionException A partir de .NET Core 2.0.4.
System.Security.Policy.PolicyException A partir de .NET Core 2.0.4.
System.Security.Principal.IdentityNotMappedException A partir de .NET Core 2.0.4.
System.Security.SecurityException A partir de .NET Core 2.0.4.
Datos de serialización limitados.
System.Security.VerificationException A partir de .NET Core 2.0.4.
System.Security.XmlSyntaxException A partir de .NET Core 2.0.4.
System.ServiceProcess.TimeoutException A partir de .NET Core 2.0.4.
System.Single
System.StackOverflowException A partir de .NET Core 2.0.4.
System.String
System.StringComparer
System.SystemException A partir de .NET Core 2.0.4.
System.Text.DecoderFallbackException A partir de .NET Core 2.0.4.
System.Text.EncoderFallbackException A partir de .NET Core 2.0.4.
System.Text.RegularExpressions.RegexMatchTimeoutException A partir de .NET Core 2.0.4.
System.Text.StringBuilder
System.Threading.AbandonedMutexException A partir de .NET Core 2.0.4.
System.Threading.BarrierPostPhaseException A partir de .NET Core 2.0.4.
System.Threading.LockRecursionException A partir de .NET Core 2.0.4.
System.Threading.SemaphoreFullException A partir de .NET Core 2.0.4.
System.Threading.SynchronizationLockException A partir de .NET Core 2.0.4.
System.Threading.Tasks.TaskCanceledException A partir de .NET Core 2.0.4.
System.Threading.Tasks.TaskSchedulerException A partir de .NET Core 2.0.4.
System.Threading.ThreadAbortException A partir de .NET Core 2.0.4.
System.Threading.ThreadInterruptedException A partir de .NET Core 2.0.4.
System.Threading.ThreadStartException A partir de .NET Core 2.0.4.
System.Threading.ThreadStateException A partir de .NET Core 2.0.4.
System.Threading.WaitHandleCannotBeOpenedException A partir de .NET Core 2.0.4.
System.TimeSpan
System.TimeZoneInfo.AdjustmentRule
System.TimeZoneInfo
System.TimeZoneNotFoundException A partir de .NET Core 2.0.4.
System.TimeoutException A partir de .NET Core 2.0.4.
System.Transactions.TransactionAbortedException A partir de .NET Core 2.0.4.
System.Transactions.TransactionException A partir de .NET Core 2.0.4.
System.Transactions.TransactionInDoubtException A partir de .NET Core 2.0.4.
System.Transactions.TransactionManagerCommunicationException A partir de .NET Core 2.0.4.
System.Transactions.TransactionPromotionException A partir de .NET Core 2.0.4.
System.Tuple
System.TypeAccessException A partir de .NET Core 2.0.4.
System.TypeInitializationException A partir de .NET Core 2.0.4.
System.TypeLoadException A partir de .NET Core 2.0.4.
System.TypeUnloadedException A partir de .NET Core 2.0.4.
System.UInt16
System.UInt32
System.UInt64
System.UIntPtr
System.UnauthorizedAccessException A partir de .NET Core 2.0.4.
System.Uri
System.UriFormatException A partir de .NET Core 2.0.4.
System.ValueTuple No es serializable en .NET Framework 4.7 y versiones anteriores.
System.ValueType
System.Version
System.WeakReference<T>
System.WeakReference
System.Xml.Schema.XmlSchemaException A partir de .NET Core 2.0.4.
System.Xml.Schema.XmlSchemaInferenceException A partir de .NET Core 2.0.4.
System.Xml.Schema.XmlSchemaValidationException A partir de .NET Core 2.0.4.
System.Xml.XPath.XPathException A partir de .NET Core 2.0.4.
System.Xml.XmlException A partir de .NET Core 2.0.4.
System.Xml.Xsl.XsltCompileException A partir de .NET Core 2.0.4.
System.Xml.Xsl.XsltException A partir de .NET Core 2.0.4.

Vea también