In my purview, Object is undefinitive, and belongs in a binary format, not in a human-readable text.
Non vedo la relazione tra queste due cose; ci sono molti buoni motivi per scegliere il testo contro il binario: questo non è uno di questi. Come appare è un dettaglio di implementazione solo .
any derived type of Object
La più grande sfida, quindi, è decidere come codificare i dati tipo . In molti serializzatori, la risposta è semplicemente: non lo fai. Ciò evita un'intera famiglia di problemi con il refactoring e la versione (tipi di ridenominazione, nomi assembly, ecc.). potresti limitarti ai tipi [Serializable]
, ma quando hai finito potresti anche usare il (terribile, IMO) BinaryFormatter
. Naturalmente, alcune domande chiave potrebbero essere: perché vuoi scrivere il tuo serializzatore? Quali sono le caratteristiche che non sono soddisfatte dagli strumenti della piattaforma esistenti e dagli strumenti di terze parti / open source?
Allora hai una serie di considerazioni su protocollo / formattazione; mappare nuovamente i dati serializzati in tipi è ... non banale. Se il tipo richiederà la configurazione (pensa: [XmlElement(...)]
ecc.), Potresti ragionevolmente limitarti ai tipi che hanno le prove di configurazione di base. Questo è kinda che cosa fa DataContractSerializer
, tranne che ricade in un serializzatore di livello di campo più elementare se mancano i dati di configurazione.
Sono anche un grande sostenitore della visione secondo cui i modelli di entità rendono i tipi di serializzazione schifosi , quindi è ragionevole aspettarsi che esista un modello DTO che rifletta ampiamente le esigenze di serializzazione; e se questo è il caso, non è irragionevole aspettarsi che il tipo di DTO possa essere annotato in qualche modo (o almeno pubblicizzato in qualche modo sul serializzatore - forse in fase di runtime se gli attributi non sono un'opzione).