我有一个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()方法返回相同的实体,我的Version字段在客户端收到时变为空。不知何故,WCF没有看到MyVersionableEntity继承自中间版本的VersionableEntityBase,因此它会跳过Version字段。
不幸的是,我无法更改GetEntityById方法以返回VersionableEntityBase,因为并非每个实体都需要版本控制功能。
如何告诉WCF序列化器从GetEntityById方法返回的实体也是VersionableEntityBase类型而不仅仅是EntityBase?
答案 0 :(得分:2)
从protected
删除Version.set
修饰符。 WCF序列化程序无法访问它。
public abstract class VersionableEntityBase : EntityBase
{
public virtual int Version { get; set; }
}