Delen via


SYSLIB0050: Serialisatie op basis van formatter is verouderd

De volgende API's zijn verouderd, te beginnen in .NET 8. Als u deze in code aanroept, wordt er een waarschuwing SYSLIB0050 gegenereerd tijdens het compileren.

Tijdelijke oplossing

  • Als u het gebruikte FormatterServices.GetUninitializedObject(Type), gebruikt RuntimeHelpers.GetUninitializedObject(Type) u in plaats daarvan.

    Als u kruislings compileert voor .NET Framework en modern .NET, kunt u een #if instructie gebruiken om de juiste API selectief aan te roepen, zoals wordt weergegeven in het volgende fragment.

    Type typeToInstantiate;
    #if NET5_0_OR_GREATER
    object obj = System.Runtime.CompilerServices.RuntimeHelpers.GetUninitializedObject(typeToInstantiate);
    #else
    object obj = System.Runtime.Serialization.FormatterServices.GetUninitializedObject(typeToInstantiate);
    #endif
    
  • Als u een serialisatiebibliotheek schrijft, raden we u ten zeerste aan om serialisatiebibliotheken te gebruiken die ondersteuning bieden voor de verouderde serialisatie-infrastructuur ([Serializable] en ISerializable). Moderne serialisatiebibliotheken moeten beleid hebben op basis van de openbare API's van een type in plaats van de details van de persoonlijke implementatie. Als u een serialisatiefunctie baseeert op deze implementatiedetails en deze sterk koppelt aan ISerializable en andere mechanismen die het insluiten van typenamen binnen de geserialiseerde nettolading aanmoedigen, kan dit leiden tot de problemen die worden beschreven in Deserialization-risico's bij het gebruik van BinaryFormatter en gerelateerde typen.

    Als uw serialisatiebibliotheek compatibel moet blijven met de verouderde serialisatie-infrastructuur, kunt u de verouderde serialisatie-API-buitenzoolingen eenvoudig onderdrukken .

Een waarschuwing onderdrukken

Als u de verouderde API's moet gebruiken, kunt u de waarschuwing in code of in het projectbestand onderdrukken.

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de waarschuwing uit te schakelen en vervolgens opnieuw in te schakelen.

// Disable the warning.
#pragma warning disable SYSLIB0050

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0050

Als u alle SYSLIB0050 waarschuwingen in uw project wilt onderdrukken, voegt u een <NoWarn> eigenschap toe aan het projectbestand.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   ...
   <NoWarn>$(NoWarn);SYSLIB0050</NoWarn>
  </PropertyGroup>
</Project>

Zie Waarschuwingen onderdrukken voor meer informatie.

Zie ook