2010-12-15 69 views
6

J'ai une chose classe Node comme ceci:C#: sérialisation XML de nœuds avec des liens cycliques

class Node { 
    IEnumerable<Node> inputs; 
} 

qui définit basiquement un graphique simple. Je veux sérialiser mon graphe sous une forme lisible par un humain, donc normalement je dirais que xml serait le chemin à parcourir. Mais XML n'a pas été fait avec des dépendances cycliques à l'esprit :)

Alors - quelle serait la meilleure façon de procéder pour la sérialisation de mon graphique?

je peux penser à quelques façons:

  • XML fossé, créer mon propre format.
  • utiliser XML, étiquette chaque nœud avec un identifiant unique, de stocker connexion listes séparées des nœuds et résoudre après le chargement

Mais je pense que d'autres personnes doivent avoir eu ce même problème avant, donc il pourrait y avoir meilleures options. Est-ce que quelqu'un connaît une approche solide?

Répondre

3

Pour xml, j'irais avec l'approche id (en changeant le modèle DTO de telle sorte que ne soit pas cyclique).

Notez que DataContractSerializer peut prendre en charge automatiquement les graphiques d'objets cycliques en passant en true pour l'option preserveObjectReferences dans les constructeurs surchargés; il ne sera pas aussi simple que la sortie XmlSerializer, mais il sera toujours lisible.

1

Si vous passez à WCF DataContractSerializer, vous pouvez conserver les références d'objets (à 3,5 SP 1 et versions ultérieures)

[DataContract(IsReference=true)] 

Sowmy a une bonne écriture jusqu'à here