Sérialisation binaire

La sérialisation est le processus de stockage de l’état d’un objet sur un support de stockage. Dans la sérialisation binaire, les champs publics et privés de l’objet et le nom de la classe, y compris l’assembly contenant la classe, sont convertis en flux d’octets, qui est ensuite écrit dans un flux de données. Lorsque l'objet est désérialisé par la suite, un clone exact de l'objet d'origine est créé.

Lors de l’implémentation d’un mécanisme de sérialisation dans un environnement orienté objet, vous devez souvent faire des compromis entre facilité d’utilisation et flexibilité. Le processus peut être automatisé en grande partie, à condition que vous puissiez suffisamment le contrôler. Par exemple, dans certaines situations, la sérialisation binaire simple n'est pas suffisante ou une raison particulière peut exiger la définition des champs à sérialiser. Les sections suivantes étudient le mécanisme de sérialisation fiable fourni avec .NET et mettent en évidence plusieurs fonctionnalités importantes qui vous permettent de personnaliser le processus en fonction de vos besoins.

Notes

L’état d’un objet codé UTF-8 ou UTF-7 n’est pas conservé si l’objet est sérialisé et désérialisé à l’aide de différentes versions .NET.

Avertissement

La sérialisation binaire peut être dangereuse. Pour plus d’informations, consultez le guide de sécurité BinaryFormatter.

La sérialisation binaire permet de modifier les membres privés à l’intérieur d’un objet et donc de modifier l’état de celui-ci. En raison de cela, d’autres frameworks de sérialisation, comme System.Text.Json, qui fonctionnent sur la surface d’API publique sont recommandés.

.NET Core

.NET Core prend en charge la sérialisation binaire pour un sous-ensemble de types. Vous pouvez voir la liste des types pris en charge dans la section Types Serializables qui suit. Les types répertoriés sont garantis d’être sérialisables entre .NET Framework 4.5.1 et versions ultérieures et entre .NET Core 2.0 et versions ultérieures. D’autres implémentations .NET, telles que Mono, ne sont pas officiellement prises en charge, mais doivent également fonctionner.

Types sérialisables

Type Notes
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException À compter de .NET Core 2.0.4.
Microsoft.CSharp.RuntimeBinder.RuntimeBinderInternalCompilerException À compter de .NET Core 2.0.4.
System.AccessViolationException À compter de .NET Core 2.0.4.
System.AggregateException À compter de .NET Core 2.0.4.
System.AppDomainUnloadedException À compter de .NET Core 2.0.4.
System.ApplicationException À compter de .NET Core 2.0.4.
System.ArgumentException À compter de .NET Core 2.0.4.
System.ArgumentNullException À compter de .NET Core 2.0.4.
System.ArgumentOutOfRangeException À compter de .NET Core 2.0.4.
System.ArithmeticException À compter de .NET Core 2.0.4.
System.Array
System.ArraySegment<T>
System.ArrayTypeMismatchException À compter de .NET Core 2.0.4.
System.Attribute
System.BadImageFormatException À compter de .NET Core 2.0.4.
System.Boolean
System.Byte
System.CannotUnloadAppDomainException À compter 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 À compter 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 À compter de .NET Core 2.0.4.
System.ComponentModel.BindingList<T>
System.ComponentModel.DataAnnotations.ValidationException À compter de .NET Core 2.0.4.
System.ComponentModel.Design.CheckoutException À compter de .NET Core 2.0.4.
System.ComponentModel.InvalidAsynchronousStateException À compter de .NET Core 2.0.4.
System.ComponentModel.InvalidEnumArgumentException À compter de .NET Core 2.0.4.
System.ComponentModel.LicenseException À compter de .NET Core 2.0.4.
La sérialisation de .NET Framework vers .NET Core n’est pas prise en charge.
System.ComponentModel.WarningException À compter de .NET Core 2.0.4.
System.ComponentModel.Win32Exception À compter de .NET Core 2.0.4.
System.Configuration.ConfigurationErrorsException À compter de .NET Core 2.0.4.
System.Configuration.ConfigurationException À compter de .NET Core 2.0.4.
System.Configuration.Provider.ProviderException À compter de .NET Core 2.0.4.
System.Configuration.SettingsPropertyIsReadOnlyException À compter de .NET Core 2.0.4.
System.Configuration.SettingsPropertyNotFoundException À compter de .NET Core 2.0.4.
System.Configuration.SettingsPropertyWrongTypeException À compter de .NET Core 2.0.4.
System.ContextMarshalException À compter de .NET Core 2.0.4.
System.DBNull À compter de .NET Core 2.0.2 et versions ultérieures.
System.Data.Common.DbException À compter de .NET Core 2.0.4.
System.Data.ConstraintException À compter de .NET Core 2.0.4.
System.Data.DBConcurrencyException À compter de .NET Core 2.0.4.
System.Data.DataException À compter de .NET Core 2.0.4.
System.Data.DataSet
System.Data.DataTable Si vous définissez RemotingFormat sur SerializationFormat.Binary, il peut uniquement être échangé avec .NET Core 2.1 et versions ultérieures.
System.Data.DeletedRowInaccessibleException À compter de .NET Core 2.0.4.
System.Data.DuplicateNameException À compter de .NET Core 2.0.4.
System.Data.EvaluateException À compter de .NET Core 2.0.4.
System.Data.InRowChangingEventException À compter de .NET Core 2.0.4.
System.Data.InvalidConstraintException À compter de .NET Core 2.0.4.
System.Data.InvalidExpressionException À compter de .NET Core 2.0.4.
System.Data.MissingPrimaryKeyException À compter de .NET Core 2.0.4.
System.Data.NoNullAllowedException À compter de .NET Core 2.0.4.
System.Data.Odbc.OdbcException À compter de .NET Core 2.0.4.
System.Data.OperationAbortedException À compter de .NET Core 2.0.4.
System.Data.PropertyCollection
System.Data.ReadOnlyException À compter de .NET Core 2.0.4.
System.Data.RowNotInTableException À compter de .NET Core 2.0.4.
System.Data.SqlClient.SqlException À compter de .NET Core 2.0.4.
La sérialisation de .NET Framework vers .NET Core n’est pas prise en charge
System.Data.SqlTypes.SqlAlreadyFilledException À compter 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 À compter de .NET Core 2.0.4.
System.Data.SqlTypes.SqlNullValueException À compter de .NET Core 2.0.4.
System.Data.SqlTypes.SqlString
System.Data.SqlTypes.SqlTruncateException À compter de .NET Core 2.0.4.
System.Data.SqlTypes.SqlTypeException À compter de .NET Core 2.0.4.
System.Data.StrongTypingException À compter de .NET Core 2.0.4.
System.Data.SyntaxErrorException À compter de .NET Core 2.0.4.
System.Data.VersionNotFoundException À compter de .NET Core 2.0.4.
System.DataMisalignedException À compter de .NET Core 2.0.4.
System.DateTime
System.DateTimeOffset
System.Decimal
System.Diagnostics.Contracts.ContractException À compter de .NET Core 2.0.4.
System.Diagnostics.Tracing.EventSourceException À compter de .NET Core 2.0.4.
System.IO.DirectoryNotFoundException À compter de .NET Core 2.0.4.
System.DirectoryServices.AccountManagement.MultipleMatchesException À compter de .NET Core 2.0.4.
System.DirectoryServices.AccountManagement.NoMatchingPrincipalException À compter de .NET Core 2.0.4.
System.DirectoryServices.AccountManagement.PasswordException À compter de .NET Core 2.0.4.
System.DirectoryServices.AccountManagement.PrincipalException À compter de .NET Core 2.0.4.
System.DirectoryServices.AccountManagement.PrincipalExistsException À compter de .NET Core 2.0.4.
System.DirectoryServices.AccountManagement.PrincipalOperationException À compter de .NET Core 2.0.4.
System.DirectoryServices.AccountManagement.PrincipalServerDownException À compter de .NET Core 2.0.4.
System.DirectoryServices.ActiveDirectory.ActiveDirectoryObjectExistsException À compter de .NET Core 2.0.4.
System.DirectoryServices.ActiveDirectory.ActiveDirectoryObjectNotFoundException À compter de .NET Core 2.0.4.
System.DirectoryServices.ActiveDirectory.ActiveDirectoryOperationException À compter de .NET Core 2.0.4.
System.DirectoryServices.ActiveDirectory.ActiveDirectoryServerDownException À compter de .NET Core 2.0.4.
System.DirectoryServices.ActiveDirectory.ForestTrustCollisionException À compter de .NET Core 2.0.4.
System.DirectoryServices.ActiveDirectory.SyncFromAllServersOperationException À compter de .NET Core 2.0.4.
System.DirectoryServices.DirectoryServicesCOMException À compter de .NET Core 2.0.4.
System.DirectoryServices.Protocols.BerConversionException À compter de .NET Core 2.0.4.
System.DirectoryServices.Protocols.DirectoryException À compter de .NET Core 2.0.4.
System.DirectoryServices.Protocols.DirectoryOperationException À compter de .NET Core 2.0.4.
System.DirectoryServices.Protocols.LdapException À compter de .NET Core 2.0.4.
System.DirectoryServices.Protocols.TlsOperationException À compter de .NET Core 2.0.4.
System.DivideByZeroException À compter de .NET Core 2.0.4.
System.DllNotFoundException À compter de .NET Core 2.0.4.
System.Double
System.Drawing.Bitmap À compter de .NET Core 3.0
System.Drawing.Color
System.Drawing.Icon À compter de .NET Core 3.0
System.Drawing.Image À compter de .NET Core 3.0
System.Drawing.Imaging.Metafile À compter 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 À compter de .NET Core 2.0.4.
System.EntryPointNotFoundException À compter de .NET Core 2.0.4.
System.Enum
System.EventArgs À compter de .NET Core 2.0.6.
System.Exception
System.ExecutionEngineException À compter de .NET Core 2.0.4.
System.FieldAccessException À compter de .NET Core 2.0.4.
System.FormatException À compter de .NET Core 2.0.4.
System.Globalization.CompareInfo
System.Globalization.CultureNotFoundException À compter de .NET Core 2.0.4.
System.Globalization.SortVersion
System.Guid
System.IO.Compression.ZLibException À compter de .NET Core 2.0.4.
System.IO.DriveNotFoundException À compter de .NET Core 2.0.4.
System.IO.EndOfStreamException À compter de .NET Core 2.0.4.
System.IO.FileFormatException À compter de .NET Core 2.0.4.
System.IO.FileLoadException À compter de .NET Core 2.0.4.
System.IO.FileNotFoundException À compter de .NET Core 2.0.4.
System.IO.IOException À compter de .NET Core 2.0.4.
System.IO.InternalBufferOverflowException À compter de .NET Core 2.0.4.
System.IO.InvalidDataException À compter de .NET Core 2.0.4.
System.IO.IsolatedStorage.IsolatedStorageException À compter de .NET Core 2.0.4.
System.IO.PathTooLongException À compter de .NET Core 2.0.4.
System.IndexOutOfRangeException À compter de .NET Core 2.0.4.
System.InsufficientExecutionStackException À compter de .NET Core 2.0.4.
System.InsufficientMemoryException À compter de .NET Core 2.0.4.
System.Int16
System.Int32
System.Int64
System.IntPtr
System.InvalidCastException À compter de .NET Core 2.0.4.
System.InvalidOperationException À compter de .NET Core 2.0.4.
System.InvalidProgramException À compter de .NET Core 2.0.4.
System.InvalidTimeZoneException À compter de .NET Core 2.0.4.
System.MemberAccessException À compter de .NET Core 2.0.4.
System.MethodAccessException À compter de .NET Core 2.0.4.
System.MissingFieldException À compter de .NET Core 2.0.4.
System.MissingMemberException À compter de .NET Core 2.0.4.
System.MissingMethodException À compter de .NET Core 2.0.4.
System.MulticastNotSupportedException À compter de .NET Core 2.0.4.
System.Net.Cookie
System.Net.CookieCollection
System.Net.CookieContainer
System.Net.CookieException À compter de .NET Core 2.0.4.
System.Net.HttpListenerException À compter de .NET Core 2.0.4.
System.Net.Mail.SmtpException À compter de .NET Core 2.0.4.
System.Net.Mail.SmtpFailedRecipientException À compter de .NET Core 2.0.4.
System.Net.Mail.SmtpFailedRecipientsException À compter de .NET Core 2.0.4.
System.Net.NetworkInformation.NetworkInformationException À compter de .NET Core 2.0.4.
System.Net.NetworkInformation.PingException À compter de .NET Core 2.0.4.
System.Net.ProtocolViolationException À compter de .NET Core 2.0.4.
System.Net.Sockets.SocketException À compter de .NET Core 2.0.4.
System.Net.WebException À compter de .NET Core 2.0.4.
System.Net.WebSockets.WebSocketException À compter de .NET Core 2.0.4.
System.NotFiniteNumberException À compter de .NET Core 2.0.4.
System.NotImplementedException À compter de .NET Core 2.0.4.
System.NotSupportedException À compter de .NET Core 2.0.4.
System.NullReferenceException À compter de .NET Core 2.0.4.
System.Nullable<T>
System.Numerics.BigInteger
System.Numerics.Complex
System.Object
System.ObjectDisposedException À compter de .NET Core 2.0.4.
System.OperationCanceledException À compter de .NET Core 2.0.4.
System.OutOfMemoryException À compter de .NET Core 2.0.4.
System.OverflowException À compter de .NET Core 2.0.4.
System.PlatformNotSupportedException À compter de .NET Core 2.0.4.
System.RankException À compter de .NET Core 2.0.4.
System.Reflection.AmbiguousMatchException À compter de .NET Core 2.0.4.
System.Reflection.CustomAttributeFormatException À compter de .NET Core 2.0.4.
System.Reflection.InvalidFilterCriteriaException À compter de .NET Core 2.0.4.
System.Reflection.ReflectionTypeLoadException À compter de .NET Core 2.0.4.
La sérialisation de .NET Framework vers .NET Core n’est pas prise en charge.
System.Reflection.TargetException À compter de .NET Core 2.0.4.
System.Reflection.TargetInvocationException À compter de .NET Core 2.0.4.
System.Reflection.TargetParameterCountException À compter de .NET Core 2.0.4.
System.Resources.MissingManifestResourceException À compter de .NET Core 2.0.4.
System.Resources.MissingSatelliteAssemblyException À compter de .NET Core 2.0.4.
System.Runtime.CompilerServices.RuntimeWrappedException À compter de .NET Core 2.0.4.
System.Runtime.InteropServices.COMException À compter de .NET Core 2.0.4.
System.Runtime.InteropServices.ExternalException À compter de .NET Core 2.0.4.
System.Runtime.InteropServices.InvalidComObjectException À compter de .NET Core 2.0.4.
System.Runtime.InteropServices.InvalidOleVariantTypeException À compter de .NET Core 2.0.4.
System.Runtime.InteropServices.MarshalDirectiveException À compter de .NET Core 2.0.4.
System.Runtime.InteropServices.SEHException À compter de .NET Core 2.0.4.
System.Runtime.InteropServices.SafeArrayRankMismatchException À compter de .NET Core 2.0.4.
System.Runtime.InteropServices.SafeArrayTypeMismatchException À compter de .NET Core 2.0.4.
System.Runtime.Serialization.InvalidDataContractException À compter de .NET Core 2.0.4.
System.Runtime.Serialization.SerializationException À compter de .NET Core 2.0.4.
System.SByte
System.Security.AccessControl.PrivilegeNotHeldException À compter de .NET Core 2.0.4.
System.Security.Authentication.AuthenticationException À compter de .NET Core 2.0.4.
System.Security.Authentication.InvalidCredentialException À compter de .NET Core 2.0.4.
System.Security.Cryptography.CryptographicException À compter de .NET Core 2.0.4.
System.Security.Cryptography.CryptographicUnexpectedOperationException À compter de .NET Core 2.0.4.
System.Security.Cryptography.Xml.CryptoSignedXmlRecursionException À compter de .NET Core 2.0.4.
System.Security.HostProtectionException À compter de .NET Core 2.0.4.
System.Security.Policy.PolicyException À compter de .NET Core 2.0.4.
System.Security.Principal.IdentityNotMappedException À compter de .NET Core 2.0.4.
System.Security.SecurityException À compter de .NET Core 2.0.4.
Données de sérialisation limitées.
System.Security.VerificationException À compter de .NET Core 2.0.4.
System.Security.XmlSyntaxException À compter de .NET Core 2.0.4.
System.ServiceProcess.TimeoutException À compter de .NET Core 2.0.4.
System.Single
System.StackOverflowException À compter de .NET Core 2.0.4.
System.String
System.StringComparer
System.SystemException À compter de .NET Core 2.0.4.
System.Text.DecoderFallbackException À compter de .NET Core 2.0.4.
System.Text.EncoderFallbackException À compter de .NET Core 2.0.4.
System.Text.RegularExpressions.RegexMatchTimeoutException À compter de .NET Core 2.0.4.
System.Text.StringBuilder
System.Threading.AbandonedMutexException À compter de .NET Core 2.0.4.
System.Threading.BarrierPostPhaseException À compter de .NET Core 2.0.4.
System.Threading.LockRecursionException À compter de .NET Core 2.0.4.
System.Threading.SemaphoreFullException À compter de .NET Core 2.0.4.
System.Threading.SynchronizationLockException À compter de .NET Core 2.0.4.
System.Threading.Tasks.TaskCanceledException À compter de .NET Core 2.0.4.
System.Threading.Tasks.TaskSchedulerException À compter de .NET Core 2.0.4.
System.Threading.ThreadAbortException À compter de .NET Core 2.0.4.
System.Threading.ThreadInterruptedException À compter de .NET Core 2.0.4.
System.Threading.ThreadStartException À compter de .NET Core 2.0.4.
System.Threading.ThreadStateException À compter de .NET Core 2.0.4.
System.Threading.WaitHandleCannotBeOpenedException À compter de .NET Core 2.0.4.
System.TimeSpan
System.TimeZoneInfo.AdjustmentRule
System.TimeZoneInfo
System.TimeZoneNotFoundException À compter de .NET Core 2.0.4.
System.TimeoutException À compter de .NET Core 2.0.4.
System.Transactions.TransactionAbortedException À compter de .NET Core 2.0.4.
System.Transactions.TransactionException À compter de .NET Core 2.0.4.
System.Transactions.TransactionInDoubtException À compter de .NET Core 2.0.4.
System.Transactions.TransactionManagerCommunicationException À compter de .NET Core 2.0.4.
System.Transactions.TransactionPromotionException À compter de .NET Core 2.0.4.
System.Tuple
System.TypeAccessException À compter de .NET Core 2.0.4.
System.TypeInitializationException À compter de .NET Core 2.0.4.
System.TypeLoadException À compter de .NET Core 2.0.4.
System.TypeUnloadedException À compter de .NET Core 2.0.4.
System.UInt16
System.UInt32
System.UInt64
System.UIntPtr
System.UnauthorizedAccessException À compter de .NET Core 2.0.4.
System.Uri
System.UriFormatException À compter de .NET Core 2.0.4.
System.ValueTuple Non sérialisable dans .NET Framework 4.7 et versions antérieures.
System.ValueType
System.Version
System.WeakReference<T>
System.WeakReference
System.Xml.Schema.XmlSchemaException À compter de .NET Core 2.0.4.
System.Xml.Schema.XmlSchemaInferenceException À compter de .NET Core 2.0.4.
System.Xml.Schema.XmlSchemaValidationException À compter de .NET Core 2.0.4.
System.Xml.XPath.XPathException À compter de .NET Core 2.0.4.
System.Xml.XmlException À compter de .NET Core 2.0.4.
System.Xml.Xsl.XsltCompileException À compter de .NET Core 2.0.4.
System.Xml.Xsl.XsltException À compter de .NET Core 2.0.4.

Voir aussi