Implementar construtores de serialização
TypeName |
ImplementSerializationConstructors |
CheckId |
CA2229 |
Category (Categoria) |
Microsoft.uso |
Quebrando alterar |
Não separável |
Causa
O tipo implementa o System.Runtime.Serialization.ISerializable interface, não é um delegado ou interface e uma das seguintes condições for verdadeira:
O tipo não tem um construtor com um System.Runtime.Serialization.SerializationInfo objeto e um System.Runtime.Serialization.StreamingContext objeto (a assinatura do construtor serialização).
O tipo é sem lacre e o modificador de acesso para seu construtor de serialização não é protegida (família).
O tipo está lacrado e o modificador de acesso para seu construtor de serialização não é particular.
Descrição da regra
Essa regra é relevante para tipos que oferecem suporte a serialização personalizada.Um tipo oferece suporte a serialização personalizada se ele implementa o ISerializable interface. O construtor de serialização é necessário para desserializar ou recriar objetos serializados usando o ISerializable.GetObjectData método.
Como corrigir violações
Para corrigir uma violação dessa regra, implemente o construtor de serialização.Para uma classe selada, tornar o construtor particular; caso contrário, torná-lo protegido.
Quando suprimir avisos
Não suprimir uma violação da regra.O tipo não serão deserializable e não funcionará em muitos cenários.
Exemplo
O exemplo a seguir mostra um tipo que satisfaça a regra.
using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Security.Permissions;
namespace UsageLibrary
{
[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 = (int) info.GetValue("n1", typeof(int));
}
// The following method serializes the instance.
[SecurityPermission(SecurityAction.LinkDemand,
Flags=SecurityPermissionFlag.SerializationFormatter)]
void ISerializable.GetObjectData(SerializationInfo info,
StreamingContext context)
{
info.AddValue("n1", n1);
}
}
}
Regras relacionadas
Tipos ISerializable marcar com o SerializableAttribute
Consulte também
Referência
System.Runtime.Serialization.ISerializable