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).