Puis-je éviter d'ajouter des champs supplémentaires à une classe pour stocker des données qui est nécessaire uniquement pour désérialisation/sérialisation?Où stocker les meilleures données de désérialisation temporaire?
Supposons que j'ai une classe:
[Serializable]
class MyClass {
[NonSerialized]
NonSerializableDataType myField;
SomeOtherDataType serializableTemporaryData;
[OnSerializing]
OnSerializing (StreamingContext context) {
// build serializableTemporaryData from myField
}
[OnDeserialized]
void OnDeserialized (StreamingContext context) {
// build myField from serializableTemporaryData
}
}
Est-il possible d'éviter d'avoir le champ serializableTemporaryData
dans chaque objet de MyClass
? Puis-je, par exemple, le rendre statique (éventuellement en changeant mes méthodes On ...)?
Constraint: Je ne peux pas changer la mise en œuvre de NonSerializableDataType
.
Exemple: Supposons myField contient une poignée à une ressource. Ensuite, lors de la sérialisation, je dois stocker des informations sur la façon d'acquérir la ressource après la sérialisation, mais je ne peux pas stocker la poignée elle-même. Si je place le handle dans une autre classe, alors je viens de déplacer le problème vers la classe wrapper - je poserais alors la même question pour la classe wrapper.
Faire statique est une mauvaise idée ici. Considérons deux threads agissant sur deux objets de même classe, faisant la sérialisation. – Ankush
Quel sérialiseur utilisez-vous? Xml ou binaire? De plus, vous ne pouvez pas changer 'NonSerializableDataType', mais pouvez-vous en hériter? –
Pourquoi avez-vous besoin de stocker et ne pouvez pas le produire à chaque fois? – MichaelT