gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:12:42 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

然后,当您在常规 .NET 桌面应用程序中使用 PCL 库时,对 PCL CSShim 的引用将替换为对 CSShim 的 .NET 模拟的引用>,使用所谓的"bait-and-switch"技术。 .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 答案。

关于c# - .NET 可移植类库 [Serializable] 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27137141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com