加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – .NET可移植类库[Serializable]属性

发布时间:2020-12-15 04:25:10 所属栏目:百科 来源:网络整理
导读:我有一个公共类库,包含我的服务器和客户端的许多模型.由于客户端在Xamarin下运行,因此公共库必须是可移植类库(PCL). 在我的服务器中,这些对象是通过AppDomain Remoting / Marshaling传递的,所以根据我的理解,对象需要标记为[Serializable]或从MarshalByRefOb
我有一个公共类库,包含我的服务器和客户端的许多模型.由于客户端在Xamarin下运行,因此公共库必须是可移植类库(PCL).

在我的服务器中,这些对象是通过AppDomain Remoting / Marshaling传递的,所以根据我的理解,对象需要标记为[Serializable]或从MarshalByRefObject继承

在PCL中,我不能对我的任何模型做任何这些事情.

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

解决方法

我创建了一个名为CSShim的PCL支持库,它包含一个“mock”[Serializable]属性.如果从您的PCL库中引用此库,则可以在代码中使用[Serializable].

然后,当您在常规.NET桌面应用程序中使用PCL库时,使用所谓的“bait-and-switch”技术将对PCL CSShim的引用替换为对CSShim的.NET anolugue的引用. .NET模拟使用[TypeForwardedTo]将[Serializable]的调用转发到mscorlib中的.NET实现.

CSShim目前可从NuGet获得PCL配置文件259,目标是.NET Framework 4.5及更高版本,Windows 8及更高版本,Windows Phone 8.1,Windows Phone Silverlight 8及更高版本,Xamarin Android和Xamarin iOS.

CSShim源代码可在Github获得.如果限制PCL库仅针对.NET 4.5及更高版本,理论上可以将PCL库重新定位到.NET Framework 4配置文件(例如配置文件328),尽管定位可能是“艰难的旅程”:-)

或者,您可以创建自己的PCL支持库,其中仅包含与SerializableAttribute相关类型的“模拟”实现,并使用类型转发创建支持库的.NET模拟,以调用.NET核心程序集中的有效类型.我已经在this StackOverflow回答中更详细地概述了这种方法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读