案例是:
[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这样的基类不起作用,子道具无法访问, 堆栈溢出不起作用,这是我第二次发布此问题但没有回答!
答案 0 :(得分:1)
我将json作为dto传递给MyService。 如果我添加“__type”:“Legal:#Dto”,MyService会将dto识别为Legal。 然后(dto as Legal).ManagerName具有值
这个解决方案正在运行,实际上传递__type并不方便。我会感谢您提出更好的建议。