Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det finns ingen drop-in ersättning för BinaryFormatter, men det finns flera serialiserare som rekommenderas för serialisering av .NET-typer. Oavsett vilken serialiserare du väljer behövs ändringar för integrering med den nya serialiseraren. Under dessa migreringar är det viktigt att överväga kompromisserna mellan att tvinga den nya serialiseraren att hantera befintliga typer med så få ändringar som möjligt jämfört med refaktoriseringstyper för att aktivera idiomatisk serialisering med den valda serialiseraren. När en serialiserare har valts bör dokumentationen studeras för bästa praxis.
Om ett binärt serialiseringsformat inte är ett krav kan du överväga att använda JSON- eller XML-serialiseringsformat. Dessa serialiserare ingår i .NET och stöds officiellt.
- JSON med System.Text.Json
 - XML med hjälp av 
System.Runtime.Serialization.DataContractSerializer 
Om en kompakt binär representation är viktig för dina scenarier rekommenderas följande serialiseringsformat och serialiserare med öppen källkod:
- MessagePack med MessagePack för C#
 - Protokollbuffertar med protobuf-net
 
Om du har kontroll över att ändra API-formen för den serialiserade typen påverkar din riktning och metod för serialisering. Migrering till dessa serialiserare kan vara enklare med möjligheten att kommentera typer med nya attribut, lägga till nya konstruktorer, göra typer/medlemmar offentliga och ändra fält till egenskaper. Utan den möjligheten kan användning av moderna serialiserare kräva implementering av anpassade konverterare eller matchare.
| Funktion | BinaryFormatter | System.Text.Json | DataContractSerializer | MessagePack för C# | protobuf-net | 
|---|---|---|---|---|---|
| Serialization formatera | binärt (NRBF) | JSON | XML | binärt (MessagePack) | binärt (protokollbuffertar) | 
| Kompakt representation | ✔️ | ❌ | ❌ | ✔️ | ✔️ | 
| Läsbar för människor | ❌️ | ✔️ | ✔️ | ❌️ | ❌️ | 
| Prestanda | ❌️ | ✔️ | ❌ | ✔️ | ✔️ | 
              [Serializable] attributstöd | 
✔️ | ❌ | ✔️ | ❌ | ❌ | 
| Serialisera offentliga typer | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | 
| Serialisera icke-offentliga typer | ✔️ | ✔️ | ✔️ | ✔️ (lösen krävs) | ✔️ | 
| Serialiseringsfält | ✔️ | ✔️ (anmäl dig) | ✔️ | ✔️ (attribut krävs) | ✔️ (attribut krävs) | 
| Serialisera icke-offentliga fält | ✔️ | ✔️ (lösen krävs) | ✔️ | ✔️ (lösen krävs) | ✔️ (attribut krävs) | 
| Serialiseringsegenskaper | ✔️* | ✔️ | ✔️ | ✔️ (attribut krävs) | ✔️ (attribut krävs) | 
| Deserialisera readonly-medlemmar | ✔️ | ✔️ (attribut krävs) | ✔️ | ✔️ | ✔️ (parameterlös ctor krävs) | 
| Polymorfisk typhierarki | ✔️ | ✔️ (attribut krävs) | ✔️ | ✔️ (attribut krävs) | ✔️ (attribut krävs) | 
| AOT-stöd | ❌️ | ✔️ | ❌ | ✔️ | ❌ (planerat) | 
JSON med System.Text.Json
Biblioteket System.Text.Json är en modern serialiserare som betonar säkerhet, höga prestanda och låg minnesallokering för JSON-formatet (JavaScript Object Notation). JSON är läsbart för människor och har brett plattformsoberoende stöd. Även om textbaserat format inte är lika kompakt som binära format, kan det minskas avsevärt i storlek genom komprimering.
              Serialization exkluderar icke-offentliga och skrivskyddade medlemmar om de inte hanteras specifikt via attribut och konstruktorer. System.Text.Json stöder även anpassad serialisering och deserialisering för mer kontroll över hur typer konverteras till JSON och vice versa. System.Text.Json stöder inte attributet [Serializable] .
Migrera till System.Text.Json (JSON).
XML med DataContractSerializer
              DataContractSerializer introducerades i .NET Framework 3.0 och används för att serialisera och deserialisera data som skickas i WCF-meddelanden (Windows Communication Foundation). 
              DataContractSerializer är en XML-serialiserare som helt stöder serialiseringsprogrammeringsmodellen som användes av BinaryFormatter, vilket innebär att den [Serializable] respekterar attributet och implementeringen av ISerializable. Därför är det serialiseraren som kräver minst arbete att migrera till. Det kräver dock att de kända typerna anges i förväg (men de flesta .NET-samlingar och primitiva typer finns i en standardlista med tillåtna och behöver inte anges).
Även om DataContractSerializer medför dessa funktionella fördelar när du migrerar från BinaryFormatter, är det inte lika modernt eller högpresterande som de andra valen.
Migrera till DataContractSerializer (XML).
Varning
Förväxla DataContractSerializer inte med NetDataContractSerializer. NetDataContractSerializer identifieras som en farlig serialiserare.
Binär med MessagePack
              MessagePack är ett kompakt binärt serialiseringsformat, vilket resulterar i mindre meddelandestorlekar jämfört med JSON och XML. Biblioteket öppen källkod MessagePack for C# är mycket högpresterande och erbjuder inbyggd supersnabb LZ4-komprimering för en ännu mindre datastorlek. Det fungerar bäst när datatyper kommenteras med antingen DataContractSerializer eller bibliotekets egna attribut. Den kan konfigureras för att stödja AOT-miljöer, icke-offentliga typer och medlemmar samt skrivskyddade typer och medlemmar.
Migrera till MessagePack (binärt).
Binärt med protobuf-net
              protobuf-net--biblioteket är en kontraktsbaserad serialiserare för .NET som använder det binära Protocol Buffers serialiseringsformat. API:et följer typiska .NET-mönster och är i stort sett jämförbart med XmlSerializer och DataContractSerializer. Det här populära biblioteket är också funktionsrikt och kan hantera icke-offentliga typer och fält, men många scenarier kräver att attribut tillämpas på medlemmar.