Qu'est ce qu'un objet graphique et comment sérialiser un
J'ai lu dernièrement sur la sérialisation. J'ai lu que lorsque j'utilise XmlSerialization je ne peux pas sérialiser des objets graphiques. Qu'est ce qu'un objet graphique et pourquoi je ne peux pas sérialiser tout simplement?
Vous devez vous connecter pour publier un commentaire.
Un objet graphique n'est pas un objet unique, mais plutôt un ensemble d'objets liés. Pour un exemple simple, considérons:
où chaque enfant sait à propos de la mère (et le parent sait au sujet de l'enfant).
Le problème est que le xml est un arbre basé sur les propriétés de l'objet... et il veut juste de marcher - c'est à dire avec le simple parent/enfant:
qui serait sérialiser comme:
Vous pouvez voir que nous sommes revenus à Un, de sorte que nous sommes maintenant dans une boucle sans fin.
XmlSerializer
pouvez sérialiser arbres de données, mais pas des graphes complets. Vous pouvez marquer les propriétés d'être ignorés, par exemple:Et maintenant ça va marcher, mais nous allons corriger le
Parent
par la suite.En revanche, certains autres sérialiseurs peut gérer des graphes (
DataContractSerializer
peut sur demande). Il le fait par le suivi des objets à l'encontre d'une clé unique - mais la sortie n'est pas ce que vous attendez de xml régulières.Un objet graphique est un ensemble d'objets qui font référence à l'un de l'autre.
De la sérialisation d'un objet graphique est délicate. Le sérialiseur aurait pour affecter un ID unique à chaque objet, puis remplacer les références avec des Identifiants uniques.
Si c'était la sérialisation en XML format, et la manipulation d'objets graphiques, il faudrait ajouter un "OBJECT_ID" (ou autre nom) attribut à chaque élément. Ce serait très facile à casser, ce qui pourrait arriver si vous avez ajouté une propriété du même nom de la classe en cours de sérialisation?
La solution la plus simple est de ne pas le soutenir.
.NET fournit la sérialisation binaire qui traite de cette question ainsi que sur la question des références circulaires.
Un objet général graphique se compose d'un ensemble d'objet la tenue de références à l'autre. Si vous avez un objet de l'arbre où il n'existe pas en arrière des liens, la sérialisation et la désérialisation est simple. Avec un graphique général, de la (dé)sérialisation processus a besoin de garder une trace de l'identité de chaque objet, et l'utilisation d'une certaine forme de mark-and-sweep algorithme assurer que les objets ne le sont pas (de)sérialisé deux fois.