Question

Je suis en train de trouver la meilleure façon de gérer la sérialisation dans mon programme.

Je veux sérialisation des champs privés (donc XML sérialiseur aucune option) Je veux sérialisation types génériques comme BindingList (SoapSerializer est pas en option) Je tiens également à fournir un certain niveau de soutien pour pouvoir désérialiser objet de versions précédentes de mon programme.

Donc tout ce que je pense que je suis parti avec est le BinarySerializer, et mettre en œuvre l'interface ISerializable pour faire face à la compatibilité ascendante.

Est-ce correct?

Note: Je dois dire que je trouve ce projet. Cependant, le projet semblait mort et je ne pouvais pas le faire fonctionner (fichier manquant erreur) http://sourceforge.net/project/showfiles.php?group_id=196509

Était-ce utile?

La solution

Avec BinaryFormatter, vous pouvez utiliser [OptionalField] , mais cela est encore très fragile .

Que diriez-vous protobuf-net ? Est-ce que tout cela, et ne pas les problèmes de versioning associés à BinaryFormatter. Comme il est basé sur le format « tampons de protocole » de Google, il est conçu pour être la version tolérante et extensible (divulgation: Je suis l'auteur, donc je peut être biaisée).

En variante, DataContractSerializer prend en charge la sérialisation de champ; vient de mettre [DataMember] contre vos champs au lieu des propriétés (nécessite .NET 3.0).

Autres conseils

Oui, vous aurez besoin de mettre en œuvre ISerializable.

Les points clés sont les suivants

  • Mettre en œuvre GetObjectData (info SerializationInfo, contexte StreamingContext). Ici, vous devez ajouter des paires de clés en objet info.
  • Mettre en œuvre le constructeur de sérialisation MyClass (info SerializationInfo, contexte StreamingContext). Ici, vous aurez besoin pour obtenir les valeurs de l'objet info.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top