Ho creato una libreria di supporto PCL denominata CSShim che contiene un attributo "simulato" [Serializable]
. Se questa libreria fa riferimento da alla libreria PCL, è possibile utilizzare [Serializable]
nel codice.
Poi, quando si consuma la libreria PCL in una normale applicazione .NET desktop, il riferimento al PCL CSShim viene sostituito con un riferimento al anolugue .NET di CSShim, utilizzando la cosiddetta tecnica "bait-and-switch" . L'analogo .NET inoltra l'invocazione di [Serializable]
all'implementazione .NET in mscorlib utilizzando [TypeForwardedTo]
.
CSShim è attualmente disponibile da NuGet per il profilo PCL 259, il targeting di .NET Framework 4.5 e versioni successive, Windows 8 e superiori, Windows Phone 8.1, Windows Phone Silverlight 8 e superiori, Xamarin Android e iOS Xamarin.
CSShim il codice sorgente è disponibile su Github. Se si tratta di una limitazione che la libreria PCL ha come target solo .NET 4.5 e versioni successive, è possibile ridistribuire teoricamente la libreria PCL a un profilo .NET Framework 4 come il profilo 328, sebbene il re-targeting possa essere "un giro approssimativo": -)
In alternativa, è possibile creare la propria libreria di supporto PCL contenente solo implementazioni "simulate" dei tipi relativi a SerializableAttribute
e creare un analogo .NET della libreria di supporto mediante l'inoltro di tipi per richiamare i tipi validi in. NET core assembly. Ho delineato questo approccio in modo più dettagliato nella risposta StackOverflow this.
fonte
2014-11-26 06:53:53
Hai davvero bisogno di serializzarli come un oggetto binario? La conversione in JSON o in XML funzionerebbe per i tuoi scopi in modo da poter evitare questo problema? – mason
La serializzazione viene eseguita automaticamente dagli oggetti proxy. Fuori dal mio controllo –