0

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

4

1 回答 1

2

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

public abstract class VersionableEntityBase : EntityBase
{
    public virtual int Version { get; set; }
}
于 2013-04-12T16:36:13.320 回答