WCF丢失继承的属性值

时间:2013-04-12 16:16:47

标签: c# wcf inheritance serialization

我有一个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?

1 个答案:

答案 0 :(得分:2)

protected删除Version.set修饰符。 WCF序列化程序无法访问它。

public abstract class VersionableEntityBase : EntityBase
{
    public virtual int Version { get; set; }
}