我有一个接口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
但这不是一个很好的方法。请给予建议。我需要编写自定义序列化程序吗?是否有办法只序列化基类并忽略子类,当两者具有相同成员时?