Pourquoi est Sérialisable Attribut requis pour un objet à sérialiser
Basé sur ma compréhension, SerializableAttribute fournit aucun moment de la compilation des vérifications, que tout est fait au moment de l'exécution. Si c'est le cas, alors pourquoi est-il nécessaire pour les classes à être marqué comme sérialisable?
Ne pouvais pas le sérialiseur juste essayer de sérialiser un objet et de l'échec? N'est-ce pas ce qu'il fait maintenant? Quand quelque chose est marqué, il tente et échoue. Ne serait-il pas mieux si vous aviez à marquer des choses comme unserializable plutôt que sérialisable? De cette façon, vous n'auriez pas le problème des bibliothèques ne pas marquer des choses comme sérialisable?
- double possible de Pourquoi avez-vous une marque de la classe avec l'attribut [serializable]?
- Vous pourriez essayer d'ajouter automatiquement les attributs pour tous vos classes à l'aide de postsharp. Un semblable est montré à cette Question: stackoverflow.com/questions/7851365/...
Vous devez vous connecter pour publier un commentaire.
Si je comprends bien, l'idée derrière le
SerializableAttribute
est de créer un opt-in système de sérialisation binaire.Gardez à l'esprit que, à la différence de la sérialisation XML, qui utilise des propriétés publiques, la sérialisation binaire attrape tous les champs privés par défaut.
Non seulement cela pourrait inclure des structures du système d'exploitation et des données privées qui n'est pas censé être exposés, mais désérialisation il pourrait en résulter un état corrompu qui peut plantage d'une application (exemple stupide: une poignée pour ouvrir un fichier dans un autre ordinateur).
Ce n'est qu'une exigence pour
BinaryFormatter
(et le SAVON équivalent, mais personne ne l'utilise que). Diego est à droite; il y a de bonnes raisons à cela en termes de ce qu'il fait, mais il est loin à partir de la seule option - en effet, personnellement, je seulement recommanderBinaryFormatter
pour parler entreAppDomains
- il est pas (OMI), une bonne façon de persistent de données (sur disque, dans le cache, à une base de données d'objets BLOB, etc).Si ce comportement provoque le problème, envisager d'utiliser toutes les alternatives:
XmlSerializer
, qui travaille sur les membres du public (et pas seulement les champs), mais exige un public constructeur sans paramètre et le type de publicDataContractSerializer
, qui peut travail entièrement opt-in (à l'aide de[DataContract]
/[DataMember]
), mais qui peut aussi (en 3.5 et plus) travail à l'encontre des champs à la placeAussi - pour une 3e partie de l'option (moi étant le 3e partie); protobuf-net peut-être d'options ici; "v2" (pas complètement encore sorti, mais disponible en tant que source) permet au modèle (dont les membres de sérialiser, etc) d'être décrits indépendamment du type, de sorte qu'il peut être appliqué à des types que vous ne contrôlez pas. Et contrairement à BinaryFormatter la sortie est la version de tolérance connu du public format, etc.