CA2229: Szerializálási konstruktorok implementálása
Tulajdonság | Érték |
---|---|
Szabályazonosító | CA2229 |
Cím | Szerializálási konstruktorok implementálása |
Kategória | Használat |
A javítás kompatibilitástörő vagy nem törik | Nem törés |
Alapértelmezés szerint engedélyezve a .NET 8-ban | Nem |
Megjegyzés:
Ez a szabály azért lett eltávolítva a .NET 8-ban, mert ütközik a SYSLIB0051: Az örökölt szerializálási támogatási API-k elavultak.
Ok
A típus implementálja az System.Runtime.Serialization.ISerializable interfészt, nem delegált vagy interfész, és az alábbi feltételek egyike igaz:
A típus nem rendelkezik olyan konstruktorsal, amely objektumot SerializationInfo és objektumot StreamingContext (a szerializálási konstruktor aláírását) vesz igénybe.
A típus nincs lezárva, és a szerializálási konstruktor hozzáférési módosítója nem védett (család).
A típus lezárva van, és a szerializálási konstruktor hozzáférési módosítója nem privát.
Szabály leírása
Ez a szabály az egyéni szerializálást támogató típusok esetében releváns. A típus támogatja az egyéni szerializálást, ha implementálja az interfészt ISerializable . A szerializálási konstruktor szükséges a metódussal ISerializable.GetObjectData szerializált objektumok deszerializálásához vagy újbóli létrehozásához.
Szabálysértések kijavítása
A szabály megsértésének kijavításához implementálja a szerializálási konstruktort. Zárt osztály esetén tegye magánjellegűvé a konstruktort; ellenkező esetben tegye védetté.
Mikor kell letiltani a figyelmeztetéseket?
Ne tiltsa el a szabály megsértését. A típus nem lesz deszerializálható, és sok esetben nem fog működni.
Példa
Az alábbi példa egy olyan típust mutat be, amely megfelel a szabálynak.
[Serializable]
public class SerializationConstructorsRequired : ISerializable
{
private int n1;
// This is a regular constructor.
public SerializationConstructorsRequired()
{
n1 = -1;
}
// This is the serialization constructor.
// Satisfies rule: ImplementSerializationConstructors.
protected SerializationConstructorsRequired(
SerializationInfo info,
StreamingContext context)
{
n1 = (info.GetValue(nameof(n1), typeof(int)) != null) ?
(int)info.GetValue(nameof(n1), typeof(int))! :
-1;
}
// The following method serializes the instance.
void ISerializable.GetObjectData(SerializationInfo info,
StreamingContext context)
{
info.AddValue(nameof(n1), n1);
}
}
Kapcsolódó szabályok
CA2237: ISerializable-típusok megjelölése a SerializableAttribute használatával
Kapcsolódó információk
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: