如何在WCF中访问继承的对象属性?

时间:2011-08-17 05:57:10

标签: c# .net wcf inheritance

案例是:

[ServiceContract]
public interface IInfo
{
    [DataMember]
    int Id{get;set;}
}

[DataContract]
[KnownType(typeof(Legal))]
public class Info
{
    [DataMember]
    public int Id { get; set; }
}

[DataContract]
public class Legal : Info
{
    [DataMember]
    public string ManagerName { get; set; }
}

[ServiceContract]
[ServiceKnownType(typeof(Legal))]
public interface IMyService
{
    [OperationContract]
    int DoWork(Info dto);
}

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class MyService : IMyService
{

    public int DoWork(Info dto)
    {
        string name;
        if (dto is Legal)
            name = (dto as Legal).ManagerName;
        return dto.Id;
    }
}

是否可以将dto视为Legal类型并且可以访问子属性?

我想存储dto,我不想为每个信息子项提供很多服务。

将Generics传递给服务不起作用,wsdl错误, 作为输入参数的IInfo等接口不起作用,铸造错误, 像Info这样的基类不起作用,子道具无法访问, 堆栈溢出不起作用,这是我第二次发布此问题但没有回答!

1 个答案:

答案 0 :(得分:1)

我将json作为dto传递给MyService。 如果我添加“__type”:“Legal:#Dto”,MyService会将dto识别为Legal。 然后(dto as Legal).ManagerName具有值

这个解决方案正在运行,实际上传递__type并不方便。我会感谢您提出更好的建议。