J'ai découvert que certaines classes utilisent l' [Serializable]
attribut.
- Qu'Est-ce que c'est?
- Quand devrais-je l'utiliser?
- Quels types d'avantages vais-je recevoir?
J'ai découvert que certaines classes utilisent l' [Serializable]
attribut.
Réponses:
Lorsque vous créez un objet dans une application de framework .Net, vous n'avez pas besoin de penser à la façon dont les données sont stockées en mémoire. Parce que le .Net Framework s'en occupe pour vous. Cependant, si vous souhaitez stocker le contenu d'un objet dans un fichier, envoyer un objet à un autre processus ou le transmettre à travers le réseau, vous devez penser à la façon dont l'objet est représenté car vous devrez convertir dans un format différent . Cette conversion est appelée SERIALISATION.
La sérialisation permet au développeur de sauvegarder l'état d'un objet et de le recréer selon les besoins, en fournissant un stockage des objets ainsi qu'un échange de données. Grâce à la sérialisation, un développeur peut effectuer des actions telles que l'envoi de l'objet à une application distante au moyen d'un service Web, le passage d'un objet d'un domaine à un autre, le passage d'un objet à travers un pare-feu en tant que chaîne XML ou le maintien de la sécurité ou spécifique à l'utilisateur informations entre les applications.
Appliquer SerializableAttribute
à un type pour indiquer que les instances de ce type peuvent être sérialisées. Appliquez le SerializableAttribute
même si la classe implémente également l' ISerializable
interface pour contrôler le processus de sérialisation.
Tous les champs publics et privés d'un type qui sont marqués par le SerializableAttribute
sont sérialisés par défaut, sauf si le type implémente l' ISerializable
interface pour remplacer le processus de sérialisation. Le processus de sérialisation par défaut exclut les champs marqués avec NonSerializedAttribute
. Si un champ d'un type sérialisable contient un pointeur, un descripteur ou une autre structure de données spécifique à un environnement particulier et ne peut pas être reconstitué de manière significative dans un environnement différent, vous souhaiterez peut-être appliquer NonSerializedAttribute
à ce champ.
Voir MSDN pour plus de détails.
Modifier 1
Toute raison de ne pas marquer quelque chose comme sérialisable
Lorsque vous transférez ou enregistrez des données, vous devez envoyer ou enregistrer uniquement les données requises. Il y aura donc moins de retards de transfert et de problèmes de stockage. Vous pouvez donc désactiver un bloc de données inutile lors de la sérialisation.
Quelques utilisations pratiques de l' [Serializable]
attribut:
BinaryFormatter
classe dans System.Runtime.Serialization.Formatters.BinaryClipboard.SetData()
classes non sérialisables ne peut pas être placée dans le presse-papiers.MarshalByRefObject
) doit être sérialisable.Ce sont les cas d'utilisation les plus courants que j'ai rencontrés.
Étant donné que la question d'origine concernait le SerializableAttribute, il convient de noter que cet attribut ne s'applique que lors de l'utilisation de BinaryFormatter ou SoapFormatter.
C'est un peu déroutant, à moins que vous ne prêtiez vraiment attention aux détails, quant au moment de l'utiliser et à son objectif réel.
Cela n'a RIEN à voir avec la sérialisation XML ou JSON.
L'interface ISerializable et la classe SerializationInfo sont utilisées avec SerializableAttribute. Ils ne sont également utilisés qu'avec le BinaryFormatter ou le SoapFormatter.
À moins que vous n'ayez l'intention de sérialiser votre classe en utilisant Binary ou Soap, ne vous embêtez pas à marquer votre classe comme [Serializable]. Les sérialiseurs XML et JSON ne sont même pas conscients de son existence.
Serializable
, et sans quand l'attribut a été supprimé. Une certaine interférence est donc possible.
La sérialisation est le processus de conversion d'un objet en un flux d'octets afin de stocker l'objet ou de le transmettre à la mémoire, à une base de données ou à un fichier.
Fonctionnement de la sérialisation
Cette illustration montre le processus global de sérialisation.
L'objet est sérialisé en un flux, qui transporte non seulement les données, mais des informations sur le type de l'objet, telles que sa version, sa culture et le nom de l'assembly. À partir de ce flux, il peut être stocké dans une base de données, un fichier ou une mémoire.
Voici un bref exemple du fonctionnement de la sérialisation. J'en apprenais aussi sur la même chose et j'ai trouvé deux liens utiles. Qu'est-ce que la sérialisation et comment cela peut être fait dans .NET .
Un exemple de programme expliquant la sérialisation
Si vous ne comprenez pas le programme ci-dessus, un programme très simple avec des explications est donné ici .
Sérialisation
La sérialisation est le processus de conversion d'un objet ou d'un ensemble d'objets graphique en un flux, c'est un tableau d'octets dans le cas de la sérialisation binaire
Utilisations de la sérialisation
Voici quelques attributs personnalisés utiles qui sont utilisés lors de la sérialisation d'un objet
[Serializable] -> Il est utilisé lorsque nous marquons le sérialisable d'un objet [NonSerialized] -> Il est utilisé lorsque nous ne voulons pas sérialiser le champ d'un objet. [OnSerializing] -> Il est utilisé lorsque nous voulons effectuer une action lors de la sérialisation d'un objet [OnSerialized] -> Il est utilisé lorsque nous voulons effectuer une action après avoir sérialisé un objet en flux.
Voici l'exemple de la sérialisation
[Serializable]
internal class DemoForSerializable
{
internal string Fname = string.Empty;
internal string Lname = string.Empty;
internal Stream SerializeToMS(DemoForSerializable demo)
{
DemoForSerializable objSer = new DemoForSerializable();
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, objSer);
return ms;
}
[OnSerializing]
private void OnSerializing(StreamingContext context) {
Fname = "sheo";
Lname = "Dayal";
}
[OnSerialized]
private void OnSerialized(StreamingContext context)
{
// Do some work after serialized object
}
}
Voici le code d'appel
class Program
{
string fname = string.Empty;
string Lname = string.Empty;
static void Main(string[] args)
{
DemoForSerializable demo = new DemoForSerializable();
Stream ms = demo.SerializeToMS(demo);
ms.Position = 0;
DemoForSerializable demo1 = new BinaryFormatter().Deserialize(ms) as DemoForSerializable;
Console.WriteLine(demo1.Fname);
Console.WriteLine(demo1.Lname);
Console.ReadLine();
}
}
What is it?
stackoverflow.com/questions/3429921/what-does-serializable-mean