【发布时间】:2010-12-21 02:49:29
【问题描述】:
我有一个接口 IServiceInfo 和一个抽象类 ServiceInfo。从 ServiceInfo 继承了几个类,如 CoreServiceInfo、ModuleServiceInfo 等。有一个名为 RootService 的服务合约返回 IServiceInfo。
public IServiceInfo GetServiceInfo()
{
return (IServiceInfo)new CoreServiceInfo();
}
我在序列化时遇到问题。我可以用 ServiceKnownType 来识别基类,用 KnownType 来识别子类。
问题是我不知道所有的 ServiceInfo 子,因为应用程序可以拥有从 ServiceInfo 继承的不同子的插件,所以我不能告诉序列化程序将所有子都放在序列化的 XML 中。
我可以忽略抽象类,但它包含某些常见的实现,所以我需要保留它。作为一种解决方法,我可以让另一个类说“sampleServiceInfo”并将所有信息类转换为 sampleServiceInfo 并从 Service 方法返回它,并将 KnownType 定义为 ServiceInfo 类。
[KnownType(typeof(sampleServiceInfo))]
public class ServiceInfo : IServiceInfo
但这听起来不太好。请建议。我需要编写自定义序列化程序吗?有没有办法只序列化 base 并在两者具有相同成员时忽略孩子?
【问题讨论】:
-
如果您自己不了解派生类,您如何期望 .NET 了解它?
-
这是边界,应用程序包含可插拔服务
标签: c# wcf serialization abstract