.NET 可移植类库 [可序列化] 属性

2024-04-28

我有一个公共类库,其中包含适用于我的服务器和客户端的许多模型。由于客户端在 Xamarin 下运行,因此公共库必须是可移植类库 (PCL)。

在我的服务器中,这些对象通过 AppDomain Remoting/Marshaling 传递,因此据我了解,对象需要标记为[Serializable]或继承自MarshalByRefObject

在 PCL 中,我无法对我的任何模型执行这些操作。

我的问题是:如何使这些对象与 AppDomain Remoting/Marshaling 一起使用并让它们驻留在可移植类库中?


我创建了一个名为的 PCL 支持库CSShim包含一个“模拟”[Serializable]属性。如果这个库被引用自yourPCL库,你可以使用[Serializable]在你的代码中。

然后,当您在常规 .NET 桌面应用程序中使用 PCL 库时,对 PCL 的引用CSShim被替换为对 .NET anlugue 的引用CSShim,使用所谓的“诱饵和转换” http://log.paulbetts.org/the-bait-and-switch-pcl-trick/技术。 .NET 类似物转发调用[Serializable]到 .NET 实现mscorlib using [TypeForwardedTo] http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.typeforwardedtoattribute.aspx.

CSShim目前可从NuGet https://www.nuget.org/packages/shim适用于 PCL 配置文件 259,针对 .NET Framework 4.5 及更高版本、Windows 8 及更高版本、Windows Phone 8.1、Windows Phone Silverlight 8 及更高版本、Xamarin Android 和 Xamarin iOS。

The CSShim源代码可在Github https://github.com/cureos/shim。如果 PCL 库仅针对 .NET 4.5 及更高版本是一个限制,理论上您可以将 PCL 库重新定位到 .NET Framework 4 配置文件(例如配置文件 328),尽管重新定位可能会“很艰难”: -)

或者,您可以创建自己的 PCL 支持库,仅包含与以下内容相关的类型的“模拟”实现SerializableAttribute,并使用类型转发创建支持库的 .NET 模拟,以调用 .NET 核心程序集中的有效类型。我在中更详细地概述了这种方法this https://stackoverflow.com/a/21368529/650012堆栈溢出答案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET 可移植类库 [可序列化] 属性 的相关文章

随机推荐