Я создал библиотеку поддержки PCL под названием CSShim, которая содержит атрибут «mock» [Serializable]
. Если на эту библиотеку ссылаются от ваша библиотека PCL, вы можете использовать [Serializable]
в своем коде.
Затем, когда вы потребляете вашу библиотеку PCL в обычном приложении .NET рабочего стола, ссылка на PCL CSShim заменяется ссылкой на .NET anolugue из CSShim, используя так называемый метод "bait-and-switch" , Аналог .NET перенаправляет вызов [Serializable]
в реализацию .NET в mscorlib с использованием [TypeForwardedTo]
.
CSShim в настоящее время доступны для PCL NuGet профиль 259, нацеливание .NET Framework 4.5 и выше, Windows 8 и выше, Windows Phone 8.1, Windows Phone Silverlight 8 и выше, Xamarin Android и IOS Xamarin.
CSShim Исходный код доступен на Github. Если это ограничение на то, что библиотека PCL предназначена только для .NET 4.5 и выше, теоретически вы можете перенаправить библиотеку PCL в профиль .NET Framework 4, такой как профиль 328, хотя повторный таргетинг может быть «грубой поездкой»: -)
В качестве альтернативы вы можете создать свою собственную библиотеку поддержки PCL, содержащую только «макетные» реализации типов, связанных с SerializableAttribute
, и создать .NET-аналог библиотеки поддержки, используя перенаправление типов для вызова допустимых типов в. NET. Я более подробно изложил этот подход в ответе this StackOverflow.
Вам действительно нужно сериализовать их как двоичный объект? Преобразует их в JSON или XML для ваших целей, чтобы избежать этой проблемы? – mason
Сериализация выполняется автоматически, через прокси-объекты. Из-под контроля. –