Sdílet prostřednictvím


SYSLIB0050: Serializace založená na formátovacím formátu je zastaralá

Následující rozhraní API jsou zastaralá počínaje rozhraním .NET 8. Volání v kódu generuje upozornění SYSLIB0050 v době kompilace.

Alternativní řešení

  • Pokud jste používali FormatterServices.GetUninitializedObject(Type), použijte RuntimeHelpers.GetUninitializedObject(Type) místo toho.

    Pokud křížově kompilujete rozhraní .NET Framework a moderní rozhraní .NET, můžete pomocí #if příkazu selektivně volat příslušné rozhraní API, jak je znázorněno v následujícím fragmentu kódu.

    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
    
  • Pokud píšete knihovnu serializace, důrazně doporučujeme použít knihovny serializace, které podporují starší infrastrukturu serializace ([Serializable] a ISerializable). Moderní knihovny serializace by měly mít zásady založené na veřejných rozhraních API typu, nikoli na podrobnostech jeho privátní implementace. Pokud na těchto podrobnostech implementace založíte serializátor a silně je propojíte s ISerializable dalšími mechanismy, které podporují vkládání názvů typů v serializované datové části, může vést k problémům popsaným v rizikech deserializace při použití BinaryFormatter a souvisejících typů.

    Pokud vaše knihovna serializace musí zůstat kompatibilní s infrastrukturou serializace starší verze, můžete snadno potlačit zastaralé serializační rozhraní API obsoletions.

Potlačení upozornění

Pokud musíte použít zastaralá rozhraní API, můžete potlačit upozornění v kódu nebo v souboru projektu.

Chcete-li potlačit pouze jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, které chcete zakázat a znovu povolit upozornění.

// Disable the warning.
#pragma warning disable SYSLIB0050

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

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

Pokud chcete potlačit všechna SYSLIB0050 upozornění v projektu, přidejte <NoWarn> do souboru projektu vlastnost.

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

Další informace naleznete v tématu Potlačení upozornění.

Viz také