Je peux cartographier les noms de classe entrants à l'aide d'un Je fais référence à la sérialisation à l'aide du système Merci! P> SerializationBinder CODE> et de remplacer la méthode
BindTotype CODE>, mais j'ai trouvé aucun moyen de modifier le nom de la classe dans le processus de sérialisation. Est-ce possible du tout ?? p>
System.Runtime.Sérialisation code>, et non le
system.xml.serialisation code>. p>.
4 Réponses :
Je ne sais pas si je vous suis, mais vous pouvez utiliser xmltypeattribute. Vous pouvez ensuite récupérer facilement ses valeurs par réflexion.
[XmlType(Namespace = "myNamespaceThatWontChange", TypeName = "myClassThatWontChange")] public class Person { public string Name; }
Mais il s'agit de xmlSérialisation, je parle de la sérialisation qui utilise l'interface SerializAlastRibute et Iséralisable.
La réponse de Islam Ibrahim est la «la» réponse (autant que je sache).
Vous pouvez le faire avec des attributs:
Regardez à l'aide d'un sélecteur de substitution de substitution + de substitution. Que conjointement avec un liant sur la désérialisation devrait faire le tour. P>
C'est très intéressant, mais ce n'est pas ce que je cherchais. J'ai découvert que je peux utiliser l'objet SerializInfo Code> du
getObjectData Changer et modifier les deux
Nom de l'Assemblée code> et
FullTyPename code> Propriétés.
Ceci est plutôt dangereux dans la manière dont vous devrez peut-être que vous ayez besoin de sérialiser des cas de contextes indifférents. I.E. Transfert de données entre niveaux, clonage, péristance, etc. Si vous allez faire cette voie, assurez-vous de spécifier le contexte de diffusion en continu. (Exemple) Formatter.context = nouveau system.Runtime.Serialization.streamingContext (System.Runtime .Sériialization.strea MingContextatStates.cr ossmachine); et soyez au courant que vous serez attaché au classeur que vous nommez les articles pour.
J'ai découvert que je peux utiliser l'objet CLASSE SERIALISABLE: STRAND> P> SerializizIfo CODE> qui figure dans la fonction
getObjectData CODE> et modifiez le nom de l'Assemblée code> et
et
FullTyPename CODE> Propriétés, de sorte que lorsque je désexiste, je peux utiliser un
SerializationBinder Code> pour mapper l'assemblage personnalisé et le nom de type retour à un type valide. Voici un Semple:
var fs = GetStream();
MyCustomClass obj = GetObjectToSerialize();
BinaryFormatter f = new BinaryFormatter();
f.Deserialize(fs, obj);
Pouvez-vous me décrire pourquoi vous voudriez faire cela? Je trouve souvent que s'il n'y a pas de fonction / méthode pour ce que j'essaie de faire, il me manque une solution beaucoup plus simple ou j'essaie juste de faire quelque chose d'impair.
Je tiens à faire cela pour faire le processus de sérialisation et de désérialisation indépendamment du nom de la classe, de sorte que si je renomme la classe ou modifier l'espace de noms de la classe, la sérialisation et la désérialisation ne changeraient pas du tout.
Quel type de sérialisation effectuez-vous? Binaire? Xml? Autre?
@Silky: C'est la nature de sérialisation qui utilise des formateurs, pas XML.
@Miguel est-il possible de passer à XML? Cela rendra votre vie beaucoup plus facile. La méthode de sérialisation binaire n'est pas faite pour gérer les modifications apportées à votre modèle d'objet.
J'ai trouvé un moyen de le faire !!! De toute façon, je ne voulais pas faire de la sérialisation XML, car il n'est pas très flexible, l'interface iserializable est beaucoup plus flexible.