serializzatore personalizzato o creare una classe base che implementa IXmlSerializable?

1

Sto lavorando su un progetto in cui ho molto specifiche specifiche di serializzazione xml, ovvero:

  • Alcune proprietà sono elementi, alcuni sono attributi

  • Alcune proprietà sono obbligatorie, altre non sono

  • Alcune proprietà sono richieste solo in alcuni contesti del generale stato dell'oggetto

  • Le proprietà non richieste non devono essere serializzate

  • Le proprietà dello stesso tipo possono essere serializzate in modo diverso

  • Alcune proprietà double dovrebbero avere arrotondamenti, forse anche personalizzati arrotondamento

E l'elenco continua ...

Attualmente sto implementando queste regole utilizzando Attribute che è l'unico modo sensato.

Ma mi chiedo, qual è il modo migliore per serializzare questi oggetti? Certamente l'approccio che ha più senso è avere un serializzatore che conosce tutte queste regole e come gestirle come XmlSerializer , anche se sembra che IXmlSerializable sia stato creato per questo motivo.

Quindi, cosa faresti? Serializzatore personalizzato o IXmlSerializable ?

    
posta Bruno Klein 03.05.2015 - 17:03
fonte

1 risposta

2

Uso di IXmlSerializable

Ci sono alcune cose da tenere in considerazione quando si implementa questa interfaccia e si dovrebbe verificare se l'uso previsto è compatibile con questo. Il grande vantaggio di questo approccio è che è possibile serializzare quelli che sono altrimenti campi privati o protetti e l'uso abbastanza semplice della serializzazione (metodo sull'oggetto stesso). Questo approccio potrebbe validare SRP in base alla natura dell'oggetto serializzato.

Utilizzo di un serializzatore

L'utilizzo di un serializzatore consente di sfruttare i vantaggi di DI (Dependency Injection), pertanto è possibile utilizzare classi di serializzazione XML riutilizzabili con DI. Questo rende i test di scrittura molto più semplici che usare nuovo per creare nuovi oggetti rende molto più difficile scrivere test (1) Lo svantaggio è che devi portare in giro i serializzatori per usare il codice e probabilmente avrai bisogno di alcuni grado di codice di cablaggio per ottenere il serializzatore corretto per un dato oggetto.

Alla fine, si riduce a quali sono i vantaggi che contano di più e quali svantaggi potrebbero ostacolare seriamente il tuo sviluppo.

1) Se due oggetti contengono lo stesso tipo di oggetto figlio, la serializzazione di quell'oggetto può essere suddivisa in una classe separata con test separati. I test sul serializzatore principale dovrebbero solo verificare che vengano chiamati i serializzatori secondari. Senza DI dovrai probabilmente duplicare i test per i bambini tra i genitori.

    
risposta data 05.05.2015 - 13:20
fonte

Leggi altre domande sui tag