Serialização / desserialização de uma estrutura de árvore

Estou tentando descobrir a melhor maneira de salvar (serializar) e depois abrir (desserializar) uma estrutura em árvore. Minha estrutura é composta de vários tipos de objetos com propriedades diferentes, mas cada um herda de uma classe "Node" abstrata abstrat

ada nó possui um ID exclusivo (GUID) e um método AddSuperNode (Node nd) que definirá o pai de um nó. Por sua vez, chama outros métodos que permitem que o nó pai saiba quais subnós possui. No entanto, alguns nós também utilizam umAddAuxSuperNode () método que adiciona um pai secundário ao Nó.

Eu estava usando serialização binária, mas agora acho que quero usar algo em que tenha um pouco mais de controle e os dados serializados sejam mais acessíveis. Também quero reter informações de tipo quando desserializar e poder serializar valores privados. Tão DataContractSerializerarecia o melhor caminho a percorre

Não posso apenas serializar a raizN diretamente porque os nós têm vários pais. Eu não quero criar objetos duplicados. Parece que preciso desconstruir a árvore em uma lista simples e depois serializá-la. Depois de serializar essa lista, reconstrua a árvore. Isso soa certo?

Como eu disse antes de cadaN tem um identificador GUID exclusivo, mas, no momento, os nós referenciam seus pais / filhos diretamente e não armazenam seus IDs. Eu poderia atualizar oAddSuperNode () eAddAuxSuperNode () métodos para também atualizar uma lista de IDs principais a serem serializados, além das referências diretas. Mas eu prefiro apenas atualizar / criar esta lista quando o objeto estiver sendo serializado. Então, eu estava pensando em criar umUpdateSuperNodeIDRefs () no nó que seria chamado logo antes da serializaçã

A seguir, é o que planejo fazer para serialização e desserialização dessa estrutura. Alguém pode sugerir uma maneira melhor / mais limpa / mais eficiente de fazer isso?

Serializaçã

1) Forneça o nó raiz da estrutura da árvore

2) Divida a estrutura da árvore em um planoDictionary (ID do guia, nó nd) OndeEu iri é o guid do nd.

3) Ligue paraUpdateSuperNodeIDRefs (); para cada nó atualizar os IDs salvos para seus pais.

4) serialize oDicionári de nós com DataContractSerializer

Desserialização

1) Desserialize oDicionári de nós

2) Repita cadaN noDicionári, reconectando cada um aos pais. Para quaisquer IDs pai armazenados, encontre o respectivoN no (s)Dicionári com ID (s) correspondente (s), chame oAddSuperNode () ouAddAuxSuperNode () para reconectar o nó ao (s) pai (s)

3) De qualquerN no dicionário encontre a raiz da estrutura

4) Retorne a raizN

questionAnswers(1)

yourAnswerToTheQuestion