我有一个 WCF 服务方法:
public EntityBase GetEntityById(string entityName, object entityId)
我有两个基类:
public abstract class EntityBase
{
public virtual object Id { get; set; }
}
public abstract class VersionableEntityBase : EntityBase
{
public virtual int Version { get; protected set; }
}
我从 EntityBase 继承的所有实体在启动时都作为 KnownTypes 添加到服务中,还包括 VersionableEntityBase 实体。
现在当我创建一个对象
public class MyEntity : EntityBase
{
}
并使用 GetEntityById 调用服务,在客户端中接收到继承的 Id 就好了。
但是,如果我创建以下内容:
public class MyVersionableEntity : VersionableEntityBase
{
}
并从 GetEntityById() 方法返回相同的实体,我的版本字段在客户端收到时变为空。不知何故,WCF 没有看到 MyVersionableEntity 从中间的 VersionableEntityBase 继承,因此它跳过了 Version 字段。
不幸的是,我无法更改 GetEntityById 方法以返回 VersionableEntityBase,因为并非每个实体都需要版本控制功能。
如何告诉 WCF 序列化程序从 GetEntityById 方法返回的实体也是 VersionableEntityBase 类型,而不仅仅是 EntityBase?