Silverlight - 使用自定义方法序列化部分类

时间:2012-12-13 14:00:41

标签: c# silverlight serialization

我有一个我一直在努力的Silverlight应用程序。此应用依赖于名为Customer的自定义类。此类的实例从我的Web服务返回。我需要在此类定义中添加一个名为CalculateLoyalty()的方法。我希望CalculateLoyalty在服务器端和客户端都可用(我的Silverlight应用程序)。

目前,我可以在服务器上使用CalculateLoyalty。不幸的是,该方法似乎没有通过网络传递。我有预感它的一些序列化的东西。如何在服务器端向我的类定义添加方法并确保它在客户端可用?

谢谢!

2 个答案:

答案 0 :(得分:0)

方法不是序列化的,只有数据(属性/字段值),因此您必须在服务器上使用不同版本的.cs文件,而不是在客户端上。您是否在Web服务和silverlight项目之间共享源代码?

如果您使用的是.NET 4.5 / VS2012,则可以创建一个“可移植类库”,其中包含您的类,可以从.NET和Silverlight项目中引用它。

答案 1 :(得分:0)

生成服务引用时,它仅复制公共属性和字段。您可以在服务器和客户端之间共享类,并避免使用服务引用。我不打算详细说明如何做到这一点,但这里有一些相关的问题可以解释需要做什么。

Create WCF Client without auto generated proxy
Call synchronous WCF operation contract methods asynchronously on silverlight

即使你这样做,我也不建议不要在你的DTO上放置逻辑。我建议您创建一个LoyaltyCalculator类并将Customer传递给此类。事实上,即使您通过添加服务参考选项生成客户端,也可以执行此操作。

你的defult Silverlight解决方案将有2个项目。

  • MyApp - 这是您的Silverlight项目。
  • MyApp.Web - 这是主机网络项目。

您不需要这样做,但我建议添加2个新项目。

  • MyApp.Shared - 一个.NET类库
  • MyApp.Shared.Silverlight - Silverlight类库。

此时,您需要将相应类库的项目引用添加到Silverlight项目和Web项目中。

如果您不想创建共享库,请将类LoyaltyCalculator添加到MpApp.SharedMyApp.Web。来吧,在这里实施这个课程。

现在在MyApp.Shared.SilverlightMyApp,如果您不想制作共享库,请选择添加 - >现有项目。浏览并选择LoyaltyCalculator.cs不要双击它!!! 而是单击“添加”按钮上的向下/向下箭头。现在选择添加为链接

LoyaltyCalculator现在可供您的服务器和客户端使用,您只需维护一份副本。