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?
c#
.net
serialization
Kevin
la source
la source
What is it?
stackoverflow.com/questions/3429921/what-does-serializable-meanRéponses:
Qu'Est-ce que c'est?
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.
Utilisations pour la sérialisation
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 leSerializableAttribute
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 avecNonSerializedAttribute
. 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 appliquerNonSerializedAttribute
à ce champ.Voir MSDN pour plus de détails.
Modifier 1
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.
la source
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.
la source
É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.
la source
Serializable
, et sans quand l'attribut a été supprimé. Une certaine interférence est donc possible.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.
Détails en msdn.
la source
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 .
la source
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
Voici le code d'appel
la source