仅在元数据中序列化特定属性

时间:2014-01-20 20:41:04

标签: c# servicestack

在一个应用程序中我有一个从基类继承的请求,当我查看元数据时,我遇到了一个奇怪的问题,我只得到“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继承并不好,但我几乎所有需要相同头信息的请求

由于

1 个答案:

答案 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而没有继承。