Ho letto ultimamente sulla serializzazione. Ho letto che quando uso XmlSerialization non posso serializzare i grafici degli oggetti. Cos'è un grafo di oggetti e perché non posso serializzarlo semplicemente?Che cos'è un oggetto grafico e come serializzo uno
risposta
Un oggetto grafico non è un singolo oggetto, ma piuttosto un insieme di oggetti correlati. Per un semplice esempio, prendi in considerazione:
public class Node {
public string Name {...}
public Node Parent {...}
public List<Node> Children {...}
}
dove ogni bambino conosce il genitore (e il genitore sa del bambino).
Il problema è che XML è un albero in base alle proprietà degli oggetti ... e vuole loro piedi solo - vale a dire con la semplice padre/figlio:
- A (B sa che è il suo bambino)
- B (sa che A è suo genitore)
che serializzare come:
<Node>
<Name>A</Name>
<!-- no Parent as A is the top node, so null -->
<Children>
<Node>
<Name>B</Name>
<Parent>
<Node>
<Name>A</Name>
*** boom ***
Si può vedere che siamo tornati ad A, quindi siamo ora in un ciclo infinito.
XmlSerializer
può serializzare alberi di dati, ma non grafici completi. È possibile contrassegnare oggetti da essere ignorati, per esempio:
[XmlIgnore]
public Node Parent {...}
E ora che funzionerà, ma dovremo risolvere il Parent
dopo.
Al contrario, alcuni altri serializzatori possono gestire i grafici (DataContractSerializer
può su richiesta). Lo fa rintracciando gli oggetti con una chiave univoca, ma l'output non è quello che ti aspetti da un normale xml.
Un oggetto grafico è un insieme di oggetti che fanno riferimento l'un l'altro.
La serializzazione di un oggetto grafico è complicata. Il serializzatore dovrebbe assegnare un ID univoco a ogni oggetto e quindi sostituire i riferimenti con ID univoci.
Se si stava serializzando in formato XML e si gestivano i grafici degli oggetti, sarebbe necessario aggiungere un attributo "OBJECT_ID" (o qualche altro nome) a ogni elemento. Questo sarebbe molto facile da rompere: cosa succederebbe se aggiungessi una proprietà con lo stesso nome alla classe che stai serializzando?
La soluzione più semplice è quella di non supportarlo.
.NET fornisce la serializzazione binaria che si occupa di questo problema, nonché il problema dei riferimenti circolari.
Un oggetto generale graph consiste in un insieme di riferimenti di detenzione di oggetti. Se si dispone di un albero di oggetti in cui non ci sono collegamenti a ritroso, la serializzazione e la deserializzazione sono semplici. Con un grafico generale, il processo di (de) serializzazione deve tenere traccia dell'identità di ciascun oggetto e utilizzare una qualche forma di algoritmo mark-and-sweep per garantire che gli oggetti non siano (de) serializzati due volte.
- 1. Opengraph che visualizza come uno ad uno - Senza oggetto Titolo
- 2. Oggetto e puntatore grafico rappresentazioni
- 3. Salva un grafico in un oggetto
- 4. può automapper creare un oggetto grafico da un oggetto flattato?
- 5. Convalida che un oggetto ha uno o più oggetti associati
- 6. Che cos'è un contesto grafico? (iOS)
- 7. Converti oggetto grafico in oggetto bitmap
- 8. Entity Framework - Scollegamento e mantenimento del relativo oggetto grafico
- 9. Che cos'è un albero del vocabolario e come costruirne uno?
- 10. Oggetto grafico al file immagine
- 11. Come impostare un grafico grafico per avere uno sfondo trasparente in R?
- 12. Serializzazione Java, Kryo e il grafico dell'oggetto
- 13. Come serializzare un oggetto che include BufferedImages
- 14. C'è uno strumento per scaricare un grafico Neo4j come Cypher e ricaricarlo da Cypher?
- 15. Come modificare impuritamente uno stato associato a un oggetto?
- 16. Differenza tra uno snippet di una classe e uno snippet di un oggetto
- 17. Come verificare se un oggetto è uno streaming in NodeJS
- 18. Che cos'è un dispositivo grafico null?
- 19. Differenza tra grafico, grafico e grafico
- 20. Esistono strumenti per visualizzare un grafico RDF? (includi uno screenshot)
- 21. Creazione di un FB Oggetto grafico aperto tramite iPhone SDK
- 22. Misurare una stringa senza utilizzare un oggetto grafico?
- 23. DataAnnotazioni: convalida ricorsiva di un intero oggetto grafico
- 24. Utilizzando l'interfaccia IXmlSerializable sul grafico oggetto complesso
- 25. HighCharts - Come creare un grafico dinamico che esporta TUTTO
- 26. Come liberare un oggetto che si trova in un record?
- 27. Come stampare un grafico usando R, Java e JRI?
- 28. Come stampare un grafico di albero e foglia come trama
- 29. Che cos'è un oggetto serializzabile?
- 30. Disegna testo con oggetto grafico su JFrame