Domanda

Sto cercando di scoprire il modo migliore per gestire la serializzazione nel mio programma.

Voglio serializzare i campi privati ​​(quindi il serializzatore XML non è opzione) voglio serializzare tipi generici come bindinglist (Soapserializer non è opzione) Voglio anche fornire un certo livello di supporto per poter deserializzare gli oggetti dalle versioni precedenti del mio programma.

Quindi tutto ciò che penso mi rimanga è BinarySerializer e l'implementazione dell'interfaccia ISerializable per far fronte alla compatibilità futura.

È corretto?

Nota:Devo dire che ho trovato questo progetto.Tuttavia il progetto sembrava morto e non riuscivo a farlo funzionare (errore file mancante)http://sourceforge.net/project/showfiles.php?group_id=196509

È stato utile?

Soluzione

Con BinaryFormatter, Puoi usare [OptionalField], ma questo è ancora molto fragile.

Che ne dite di protobuf-net?Fa tutto questo e non presenta i problemi di versione associati a BinaryFormatter.Poiché è basato sul formato "buffer di protocollo" di Google, lo è progettato essere tollerante alla versione ed estensibile (informativa:Sono l'autore, quindi potrei essere di parte).

In alternativa, DataContractSerializer supporta la serializzazione sul campo;basta impostare [DataMember] rispetto ai campi anziché alle proprietà (richiede .NET 3.0).

Altri suggerimenti

Sì, dovresti implementare ISerializable.

I punti chiave sono i seguenti

  • Implementare GetObjectData (informazioni su SerializationInfo, contesto StreamingContext).Qui è necessario aggiungere coppie di chiavi nell'oggetto informazioni.
  • Implementare il costruttore di serializzazione MyClass (informazioni su SerializationInfo, contesto StreamingContext).Qui dovresti ottenere i valori dall'oggetto info.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top