In quali circostanze si digiterà "System.Object" qualificarsi per la serializzazione?

1

Sono responsabile di un formato di serializzazione completo con supporto per serializzare gli oggetti di runtime (qualsiasi tipo derivato di Object ). Non riesco a trovare uno scenario sensato in cui si dovrebbe scegliere di serializzare immediatamente un'istanza di System.Object . Nella mia competenza, Object non è definitivo e appartiene a un formato binario, non in un testo leggibile dall'uomo.

Con l'introduzione di Generics, le istanze di tipo Object non dovrebbero più identificare i dati. Qualche idea per farmi superare il limite? Per considerazione, si noti che sia i Contratti dati che JSON.NET supportano la serializzazione di System.Object .

    
posta toplel32 13.04.2015 - 14:13
fonte

1 risposta

4

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

    
risposta data 13.04.2015 - 14:24
fonte

Leggi altre domande sui tag