Domanda

Sto usando Binary serializzazione in .NET per oggetti clone. Qualsiasi delle mie classi devo segnare con l'attributo <Serializable()> in modo che il serializzatore per elaborare la classe. Tuttavia, poiché si tratta di una funzione che verrà utilizzato su qualsiasi oggetto, mi chiedevo:

E 'possibile avere il serializzatore serializzare l'oggetto anche se non è contrassegnato con l'attributo <Serializable()>? In caso contrario, c'è un modo per "auto-applicare" l'attributo a qualsiasi classe?

Modifica. La mia preoccupazione principale è che ho bisogno di essere in grado di oggetti POCO clone che già esistono in .NET Framework. Sono tutte quelle già serializable così?

È stato utile?

Soluzione

Senza sapere come una classe è implementata, non è sicuro di serializzare, e così facendo potrebbe portare a oggetti sottilmente-rotti. È per questo che un progettista di classe deve intenzionalmente aggiungere l'attributo Serializable, lasciando che il know runtime che si tratta di un funzionamento sicuro. aggiungendo automaticamente che l'attributo a qualsiasi classe è probabilmente una cattiva idea.

Se avete veramente bisogno di serializzare una classe che non è Serializable, è possibile farlo manualmente:

  1. Capire un modo per convertire la classe problema da e verso una rappresentazione alternativa.
  2. Usa che altra classe per la serializzazione, la conversione di avanti e indietro, se necessario.

In mancanza di questo, si dovrebbe guardare in altri modi di preservare lo stato oltre serializzazione.

Altri suggerimenti

Non è possibile modificare gli attributi in fase di esecuzione. Solo in sorgente.

E 'possibile utilizzare la reflection per iterare sulle proprietà di qualsiasi classe / istanza. Ma bisogna fare un serializzatore personalizzato.

Il framework .NET per sé di solito fornisce il supporto di serializzazione in tutte le classi e le strutture in cui ciò non ha senso, quindi è probabile che le classi del framework stesso funziona bene con il tuo clonazione. Tuttavia, si può ottenere nei guai se si utilizzano librerie di terze parti, che purtroppo molto spesso non hanno il supporto di serializzazione corretta.

Si consideri utilizzando typeof (yourType) .IsSerializable ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top