Binäre Serialisierung

Die Serialisierung kann als Prozess der Speicherung eines Objektzustands in einem Speichermedium definiert werden. Im Rahmen dieses Vorgangs werden die öffentlichen und privaten Felder des Objekts und der Name der Klasse, einschließlich der Assembly, die die Klasse enthält, in einen Bytestream umgewandelt, der dann in einen Datenstream geschrieben wird. Wenn das Objekt anschließend deserialisiert wird, wird ein genauer Klon des ursprünglichen Objekts erstellt.

Bei der Implementierung eines Serialisierungsmechanismus in einer objektorientierten Umgebung muss vielfach zwischen einfacher Handhabung und Flexibilät abgewogen werden. Dieser Vorgang lässt sich größtenteils automatisieren, sofern Sie ausreichend Kontrolle über den Vorgang haben. Es kann beispielsweise Situationen geben, in denen eine einfache binäre Serialisierung nicht ausreichend ist, oder aus einem bestimmt Grund kann es erforderlich sein zu entscheiden, welche Felder einer Klasse serialisiert werden müssen. In den folgenden Abschnitten wird der robuste Serialisierungsmechanismus untersucht, der von .NET bereitgestellt wird, und es werden einige wichtige Funktionen hervorgehoben, mit denen Sie diesen Vorgang an Ihre Anforderungen anpassen können.

Hinweis

Der Zustand eines UTF-8- oder UTF-7-codierten Objektes wird nicht beibehalten, wenn das Objekt mit verschiedenen Versionen von .NET serialisiert und deserialisiert wird.

Warnung

Die binäre Serialisierung kann gefährlich sein. Weitere Informationen finden Sie im BinaryFormatter-Sicherheitshandbuch.

Die binäre Serialisierung ermöglicht das Ändern privater Member innerhalb eines Objekts und somit die Änderung von deren Zustand. Aus diesem Grund werden andere Serialisierungsframeworks wie System.Text.Json empfohlen, die auf der öffentlichen API-Oberfläche operieren.

.NET Core

.NET Core unterstützt binäre Serialisierung für eine Teilmenge der Typen. Die Liste der unterstützten Typen finden Sie im folgenden Abschnitt unter Serialisierbare Typen. Die aufgelisteten Typen können zwischen .NET Framework 4.5.1 und höheren Versionen und .NET Core 2.0 und höheren Versionen serialisiert werden. Andere Implementierungen von .NET, z. B. Mono, werden nicht offiziell unterstützt, sollten jedoch ebenfalls funktionieren.

Serialisierbare Typen

Typ Hinweise
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException Ab .NET Core 2.0.4.
Microsoft.CSharp.RuntimeBinder.RuntimeBinderInternalCompilerException Ab .NET Core 2.0.4.
System.AccessViolationException Ab .NET Core 2.0.4.
System.AggregateException Ab .NET Core 2.0.4.
System.AppDomainUnloadedException Ab .NET Core 2.0.4.
System.ApplicationException Ab .NET Core 2.0.4.
System.ArgumentException Ab .NET Core 2.0.4.
System.ArgumentNullException Ab .NET Core 2.0.4.
System.ArgumentOutOfRangeException Ab .NET Core 2.0.4.
System.ArithmeticException Ab .NET Core 2.0.4.
System.Array
System.ArraySegment<T>
System.ArrayTypeMismatchException Ab .NET Core 2.0.4.
System.Attribute
System.BadImageFormatException Ab .NET Core 2.0.4.
System.Boolean
System.Byte
System.CannotUnloadAppDomainException Ab .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 Ab .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 Ab .NET Core 2.0.4.
System.ComponentModel.BindingList<T>
System.ComponentModel.DataAnnotations.ValidationException Ab .NET Core 2.0.4.
System.ComponentModel.Design.CheckoutException Ab .NET Core 2.0.4.
System.ComponentModel.InvalidAsynchronousStateException Ab .NET Core 2.0.4.
System.ComponentModel.InvalidEnumArgumentException Ab .NET Core 2.0.4.
System.ComponentModel.LicenseException Ab .NET Core 2.0.4
die Serialisierung von .NET Framework zu .NET Core wird nicht unterstützt.
System.ComponentModel.WarningException Ab .NET Core 2.0.4.
System.ComponentModel.Win32Exception Ab .NET Core 2.0.4.
System.Configuration.ConfigurationErrorsException Ab .NET Core 2.0.4.
System.Configuration.ConfigurationException Ab .NET Core 2.0.4.
System.Configuration.Provider.ProviderException Ab .NET Core 2.0.4.
System.Configuration.SettingsPropertyIsReadOnlyException Ab .NET Core 2.0.4.
System.Configuration.SettingsPropertyNotFoundException Ab .NET Core 2.0.4.
System.Configuration.SettingsPropertyWrongTypeException Ab .NET Core 2.0.4.
System.ContextMarshalException Ab .NET Core 2.0.4.
System.DBNull Ab .NET Core 2.0.2 und höheren Versionen
System.Data.Common.DbException Ab .NET Core 2.0.4.
System.Data.ConstraintException Ab .NET Core 2.0.4.
System.Data.DBConcurrencyException Ab .NET Core 2.0.4.
System.Data.DataException Ab .NET Core 2.0.4.
System.Data.DataSet
System.Data.DataTable Wenn Sie RemotingFormat auf SerializationFormat.Binary festlegen, kann die Eigenschaft nur mit .NET Core 2.1 und höheren Versionen ausgetauscht werden.
System.Data.DeletedRowInaccessibleException Ab .NET Core 2.0.4.
System.Data.DuplicateNameException Ab .NET Core 2.0.4.
System.Data.EvaluateException Ab .NET Core 2.0.4.
System.Data.InRowChangingEventException Ab .NET Core 2.0.4.
System.Data.InvalidConstraintException Ab .NET Core 2.0.4.
System.Data.InvalidExpressionException Ab .NET Core 2.0.4.
System.Data.MissingPrimaryKeyException Ab .NET Core 2.0.4.
System.Data.NoNullAllowedException Ab .NET Core 2.0.4.
System.Data.Odbc.OdbcException Ab .NET Core 2.0.4.
System.Data.OperationAbortedException Ab .NET Core 2.0.4.
System.Data.PropertyCollection
System.Data.ReadOnlyException Ab .NET Core 2.0.4.
System.Data.RowNotInTableException Ab .NET Core 2.0.4.
System.Data.SqlClient.SqlException Ab .NET Core 2.0.4,
die Serialisierung von .NET Framework zu .NET Core wird nicht unterstützt.
System.Data.SqlTypes.SqlAlreadyFilledException Ab .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 Ab .NET Core 2.0.4.
System.Data.SqlTypes.SqlNullValueException Ab .NET Core 2.0.4.
System.Data.SqlTypes.SqlString
System.Data.SqlTypes.SqlTruncateException Ab .NET Core 2.0.4.
System.Data.SqlTypes.SqlTypeException Ab .NET Core 2.0.4.
System.Data.StrongTypingException Ab .NET Core 2.0.4.
System.Data.SyntaxErrorException Ab .NET Core 2.0.4.
System.Data.VersionNotFoundException Ab .NET Core 2.0.4.
System.DataMisalignedException Ab .NET Core 2.0.4.
System.DateTime
System.DateTimeOffset
System.Decimal
System.Diagnostics.Contracts.ContractException Ab .NET Core 2.0.4.
System.Diagnostics.Tracing.EventSourceException Ab .NET Core 2.0.4.
System.IO.DirectoryNotFoundException Ab .NET Core 2.0.4.
System.DirectoryServices.AccountManagement.MultipleMatchesException Ab .NET Core 2.0.4.
System.DirectoryServices.AccountManagement.NoMatchingPrincipalException Ab .NET Core 2.0.4.
System.DirectoryServices.AccountManagement.PasswordException Ab .NET Core 2.0.4.
System.DirectoryServices.AccountManagement.PrincipalException Ab .NET Core 2.0.4.
System.DirectoryServices.AccountManagement.PrincipalExistsException Ab .NET Core 2.0.4.
System.DirectoryServices.AccountManagement.PrincipalOperationException Ab .NET Core 2.0.4.
System.DirectoryServices.AccountManagement.PrincipalServerDownException Ab .NET Core 2.0.4.
System.DirectoryServices.ActiveDirectory.ActiveDirectoryObjectExistsException Ab .NET Core 2.0.4.
System.DirectoryServices.ActiveDirectory.ActiveDirectoryObjectNotFoundException Ab .NET Core 2.0.4.
System.DirectoryServices.ActiveDirectory.ActiveDirectoryOperationException Ab .NET Core 2.0.4.
System.DirectoryServices.ActiveDirectory.ActiveDirectoryServerDownException Ab .NET Core 2.0.4.
System.DirectoryServices.ActiveDirectory.ForestTrustCollisionException Ab .NET Core 2.0.4.
System.DirectoryServices.ActiveDirectory.SyncFromAllServersOperationException Ab .NET Core 2.0.4.
System.DirectoryServices.DirectoryServicesCOMException Ab .NET Core 2.0.4.
System.DirectoryServices.Protocols.BerConversionException Ab .NET Core 2.0.4.
System.DirectoryServices.Protocols.DirectoryException Ab .NET Core 2.0.4.
System.DirectoryServices.Protocols.DirectoryOperationException Ab .NET Core 2.0.4.
System.DirectoryServices.Protocols.LdapException Ab .NET Core 2.0.4.
System.DirectoryServices.Protocols.TlsOperationException Ab .NET Core 2.0.4.
System.DivideByZeroException Ab .NET Core 2.0.4.
System.DllNotFoundException Ab .NET Core 2.0.4.
System.Double
System.Drawing.Color
System.Drawing.Point
System.Drawing.PointF
System.Drawing.Rectangle
System.Drawing.RectangleF
System.Drawing.Size
System.Drawing.SizeF
System.DuplicateWaitObjectException Ab .NET Core 2.0.4.
System.EntryPointNotFoundException Ab .NET Core 2.0.4.
System.Enum
System.EventArgs Ab .NET Core 2.0.6
System.Exception
System.ExecutionEngineException Ab .NET Core 2.0.4.
System.FieldAccessException Ab .NET Core 2.0.4.
System.FormatException Ab .NET Core 2.0.4.
System.Globalization.CompareInfo
System.Globalization.CultureNotFoundException Ab .NET Core 2.0.4.
System.Globalization.SortVersion
System.Guid
System.IO.Compression.ZLibException Ab .NET Core 2.0.4.
System.IO.DriveNotFoundException Ab .NET Core 2.0.4.
System.IO.EndOfStreamException Ab .NET Core 2.0.4.
System.IO.FileFormatException Ab .NET Core 2.0.4.
System.IO.FileLoadException Ab .NET Core 2.0.4.
System.IO.FileNotFoundException Ab .NET Core 2.0.4.
System.IO.IOException Ab .NET Core 2.0.4.
System.IO.InternalBufferOverflowException Ab .NET Core 2.0.4.
System.IO.InvalidDataException Ab .NET Core 2.0.4.
System.IO.IsolatedStorage.IsolatedStorageException Ab .NET Core 2.0.4.
System.IO.PathTooLongException Ab .NET Core 2.0.4.
System.IndexOutOfRangeException Ab .NET Core 2.0.4.
System.InsufficientExecutionStackException Ab .NET Core 2.0.4.
System.InsufficientMemoryException Ab .NET Core 2.0.4.
System.Int16
System.Int32
System.Int64
System.IntPtr
System.InvalidCastException Ab .NET Core 2.0.4.
System.InvalidOperationException Ab .NET Core 2.0.4.
System.InvalidProgramException Ab .NET Core 2.0.4.
System.InvalidTimeZoneException Ab .NET Core 2.0.4.
System.MemberAccessException Ab .NET Core 2.0.4.
System.MethodAccessException Ab .NET Core 2.0.4.
System.MissingFieldException Ab .NET Core 2.0.4.
System.MissingMemberException Ab .NET Core 2.0.4.
System.MissingMethodException Ab .NET Core 2.0.4.
System.MulticastNotSupportedException Ab .NET Core 2.0.4.
System.Net.Cookie
System.Net.CookieCollection
System.Net.CookieContainer
System.Net.CookieException Ab .NET Core 2.0.4.
System.Net.HttpListenerException Ab .NET Core 2.0.4.
System.Net.Mail.SmtpException Ab .NET Core 2.0.4.
System.Net.Mail.SmtpFailedRecipientException Ab .NET Core 2.0.4.
System.Net.Mail.SmtpFailedRecipientsException Ab .NET Core 2.0.4.
System.Net.NetworkInformation.NetworkInformationException Ab .NET Core 2.0.4.
System.Net.NetworkInformation.PingException Ab .NET Core 2.0.4.
System.Net.ProtocolViolationException Ab .NET Core 2.0.4.
System.Net.Sockets.SocketException Ab .NET Core 2.0.4.
System.Net.WebException Ab .NET Core 2.0.4.
System.Net.WebSockets.WebSocketException Ab .NET Core 2.0.4.
System.NotFiniteNumberException Ab .NET Core 2.0.4.
System.NotImplementedException Ab .NET Core 2.0.4.
System.NotSupportedException Ab .NET Core 2.0.4.
System.NullReferenceException Ab .NET Core 2.0.4.
System.Nullable<T>
System.Numerics.BigInteger
System.Numerics.Complex
System.Object
System.ObjectDisposedException Ab .NET Core 2.0.4.
System.OperationCanceledException Ab .NET Core 2.0.4.
System.OutOfMemoryException Ab .NET Core 2.0.4.
System.OverflowException Ab .NET Core 2.0.4.
System.PlatformNotSupportedException Ab .NET Core 2.0.4.
System.RankException Ab .NET Core 2.0.4.
System.Reflection.AmbiguousMatchException Ab .NET Core 2.0.4.
System.Reflection.CustomAttributeFormatException Ab .NET Core 2.0.4.
System.Reflection.InvalidFilterCriteriaException Ab .NET Core 2.0.4.
System.Reflection.ReflectionTypeLoadException Ab .NET Core 2.0.4
die Serialisierung von .NET Framework zu .NET Core wird nicht unterstützt.
System.Reflection.TargetException Ab .NET Core 2.0.4.
System.Reflection.TargetInvocationException Ab .NET Core 2.0.4.
System.Reflection.TargetParameterCountException Ab .NET Core 2.0.4.
System.Resources.MissingManifestResourceException Ab .NET Core 2.0.4.
System.Resources.MissingSatelliteAssemblyException Ab .NET Core 2.0.4.
System.Runtime.CompilerServices.RuntimeWrappedException Ab .NET Core 2.0.4.
System.Runtime.InteropServices.COMException Ab .NET Core 2.0.4.
System.Runtime.InteropServices.ExternalException Ab .NET Core 2.0.4.
System.Runtime.InteropServices.InvalidComObjectException Ab .NET Core 2.0.4.
System.Runtime.InteropServices.InvalidOleVariantTypeException Ab .NET Core 2.0.4.
System.Runtime.InteropServices.MarshalDirectiveException Ab .NET Core 2.0.4.
System.Runtime.InteropServices.SEHException Ab .NET Core 2.0.4.
System.Runtime.InteropServices.SafeArrayRankMismatchException Ab .NET Core 2.0.4.
System.Runtime.InteropServices.SafeArrayTypeMismatchException Ab .NET Core 2.0.4.
System.Runtime.Serialization.InvalidDataContractException Ab .NET Core 2.0.4.
System.Runtime.Serialization.SerializationException Ab .NET Core 2.0.4.
System.SByte
System.Security.AccessControl.PrivilegeNotHeldException Ab .NET Core 2.0.4.
System.Security.Authentication.AuthenticationException Ab .NET Core 2.0.4.
System.Security.Authentication.InvalidCredentialException Ab .NET Core 2.0.4.
System.Security.Cryptography.CryptographicException Ab .NET Core 2.0.4.
System.Security.Cryptography.CryptographicUnexpectedOperationException Ab .NET Core 2.0.4.
System.Security.Cryptography.Xml.CryptoSignedXmlRecursionException Ab .NET Core 2.0.4.
System.Security.HostProtectionException Ab .NET Core 2.0.4.
System.Security.Policy.PolicyException Ab .NET Core 2.0.4.
System.Security.Principal.IdentityNotMappedException Ab .NET Core 2.0.4.
System.Security.SecurityException Ab .NET Core 2.0.4,
eingeschränkte Serialisierungsdaten
System.Security.VerificationException Ab .NET Core 2.0.4.
System.Security.XmlSyntaxException Ab .NET Core 2.0.4.
System.ServiceProcess.TimeoutException Ab .NET Core 2.0.4.
System.Single
System.StackOverflowException Ab .NET Core 2.0.4.
System.String
System.StringComparer
System.SystemException Ab .NET Core 2.0.4.
System.Text.DecoderFallbackException Ab .NET Core 2.0.4.
System.Text.EncoderFallbackException Ab .NET Core 2.0.4.
System.Text.RegularExpressions.RegexMatchTimeoutException Ab .NET Core 2.0.4.
System.Text.StringBuilder
System.Threading.AbandonedMutexException Ab .NET Core 2.0.4.
System.Threading.BarrierPostPhaseException Ab .NET Core 2.0.4.
System.Threading.LockRecursionException Ab .NET Core 2.0.4.
System.Threading.SemaphoreFullException Ab .NET Core 2.0.4.
System.Threading.SynchronizationLockException Ab .NET Core 2.0.4.
System.Threading.Tasks.TaskCanceledException Ab .NET Core 2.0.4.
System.Threading.Tasks.TaskSchedulerException Ab .NET Core 2.0.4.
System.Threading.ThreadAbortException Ab .NET Core 2.0.4.
System.Threading.ThreadInterruptedException Ab .NET Core 2.0.4.
System.Threading.ThreadStartException Ab .NET Core 2.0.4.
System.Threading.ThreadStateException Ab .NET Core 2.0.4.
System.Threading.WaitHandleCannotBeOpenedException Ab .NET Core 2.0.4.
System.TimeSpan
System.TimeZoneInfo.AdjustmentRule
System.TimeZoneInfo
System.TimeZoneNotFoundException Ab .NET Core 2.0.4.
System.TimeoutException Ab .NET Core 2.0.4.
System.Transactions.TransactionAbortedException Ab .NET Core 2.0.4.
System.Transactions.TransactionException Ab .NET Core 2.0.4.
System.Transactions.TransactionInDoubtException Ab .NET Core 2.0.4.
System.Transactions.TransactionManagerCommunicationException Ab .NET Core 2.0.4.
System.Transactions.TransactionPromotionException Ab .NET Core 2.0.4.
System.Tuple
System.TypeAccessException Ab .NET Core 2.0.4.
System.TypeInitializationException Ab .NET Core 2.0.4.
System.TypeLoadException Ab .NET Core 2.0.4.
System.TypeUnloadedException Ab .NET Core 2.0.4.
System.UInt16
System.UInt32
System.UInt64
System.UIntPtr
System.UnauthorizedAccessException Ab .NET Core 2.0.4.
System.Uri
System.UriFormatException Ab .NET Core 2.0.4.
System.ValueTuple Nicht in .NET Framework 4.7 und früheren Versionen serialisierbar
System.ValueType
System.Version
System.WeakReference<T>
System.WeakReference
System.Xml.Schema.XmlSchemaException Ab .NET Core 2.0.4.
System.Xml.Schema.XmlSchemaInferenceException Ab .NET Core 2.0.4.
System.Xml.Schema.XmlSchemaValidationException Ab .NET Core 2.0.4.
System.Xml.XPath.XPathException Ab .NET Core 2.0.4.
System.Xml.XmlException Ab .NET Core 2.0.4.
System.Xml.Xsl.XsltCompileException Ab .NET Core 2.0.4.
System.Xml.Xsl.XsltException Ab .NET Core 2.0.4.

Siehe auch