在一个应用程序中我有一个从基类继承的请求,当我查看元数据时,我遇到了一个奇怪的问题,我只得到“Max”序列化而不是“Header”
执行应用程序时,它可以工作......在准备请求存根时似乎有问题
public class SomeRequest : SomeBaseClass<int>
{
public int Max { get; set; }
}
public class SomeBaseClass<T>
{
public Header SomeHeader { get; set; }
public T Response {get;set;}
}
public class Header
{
public int IDUser { get; set; }
public string Name { get; set; }
}
有人可以帮我吗?
P.S。我知道在SS中hinerithance继承并不好,但我几乎所有需要相同头信息的请求
由于
答案 0 :(得分:3)
你已经回答了自己的问题。 SS建议不要继承,因此元数据不支持描述您的DTO。这是设计的。我会遵循推荐的设计模式。
完整创建对象。这需要更多努力,但您将获得正确的元数据,您的服务DTO对客户来说是明确的,并遵循ServiceStack的DRY原则。
public class SomeRequest
{
public int Max { get; set; }
public Header SomeHeader { get; set; }
public int Response { get; set; }
}
Quoting mythz (ServiceStack creator) on another DTO inheritance question:
DTO中的继承是一个坏主意 - DTO应尽可能自我描述,而通过使用继承客户端实际上不知道服务最终返回。这就是为什么你的DTO类在大多数“基于标准的”序列化器中无法正确/序列化的原因。
另一种方法是实现自己的MetaDataFeature。但这不是一件容易的事,因此我认为实现这一目标的努力超过了编写完整的DTO而没有继承。