2010-12-15 9 views
6

que tiene un algo Nodo clase como esta:C#: xml serialización de nodos con enlaces cíclicos

class Node { 
    IEnumerable<Node> inputs; 
} 

que define básicamente un gráfico simple. Quiero serializar mi gráfico a una forma legible por humanos, por lo que normalmente diría que xml sería el camino a seguir. Pero XML no se realizó con dependencias cíclicas en mente :)

Entonces, ¿cuál sería la mejor forma de serializar mi gráfico?

puedo pensar en algunas maneras:

  • XML zanja, crear mi propio formato.
  • uso de XML, la etiqueta de cada nodo con un identificador único, almacén de conexión listas separadas de los nodos y se resuelven después de la carga

Pero creo que otras personas deben haber tenido este mismo problema antes, lo que puede haber alguna mejores opciones. ¿Alguien sabe de un enfoque sólido?

Respuesta

3

Para xml, yo iría con el enfoque id (cambiando el modelo DTO de modo que no sea cíclico).

Tenga en cuenta que DataContractSerializer puede admitir gráficos de objeto cíclico automáticamente al pasar true para la opción preserveObjectReferences en los constructores sobrecargados; no será tan simple como la salida XmlSerializer, pero seguirá siendo legible.

1

Si cambia a WCF DataContractSerializer, puede conservar las referencias a objetos (en 3.5 SP 1 y posteriores)

[DataContract(IsReference=true)] 

Sowmy tiene una buena escritura hasta here