servicestack,dto,C#,servicestack,Dto" /> servicestack,dto,C#,servicestack,Dto" />

C# 如何使用ServiceStack数据进行转换和填充?

C# 如何使用ServiceStack数据进行转换和填充?,c#,servicestack,dto,C#,servicestack,Dto,我是一名ServiceStack新手。我有一个相当大的.NETC#解决方案,使用CambiumORM 我正在将ServiceStackWebService项目添加到我的解决方案中。我跟着。工作正常 现在我想添加UserService:ServicereturningUserDTO,使用TranslateTo或PopulateWith像writed一样 [路由(“/user”)] [路由(“/user/{Id}”)] 公共类用户 { 公共int Id{get;set;} 公共字符串名{get;se

我是一名
ServiceStack
新手。我有一个相当大的.NETC#解决方案,使用
Cambium
ORM

我正在将
ServiceStack
WebService项目添加到我的解决方案中。我跟着。工作正常

现在我想添加
UserService:Service
returning
User
DTO,使用
TranslateTo
PopulateWith
像writed一样

[路由(“/user”)]
[路由(“/user/{Id}”)]
公共类用户
{
公共int Id{get;set;}
公共字符串名{get;set;}
公共字符串LastName{get;set;}
公共字符串电子邮件{get;set;}
}
公共类UserService:Service
{
私有用户=新用户();
公共用户响应获取(用户请求)
{
返回新的UserResponse{Result=users.Single(request.Id).TranslateTo()};
}
}
但是,我无法找到这些方法

我得到的
不包含“TranslateTo”的定义

我克隆了
ServiceStack
存储库,但在任何扩展中都找不到这些方法的任何实现


我错过了什么?非常感谢你的帮助

对于ServiceStack v3,它是当前在中可用的稳定版本,
TranslateTo
和相关方法是
ServiceStack.Common
命名空间中的扩展方法。请注意,如果您要克隆GitHub repo,v3不是
master
分支。因此,使用ServiceStack.Common向文件中添加
,应该足以导入扩展名方法


ServiceStack v4是GitHub中的
master
分支,是一个预览版本。我认为TranslateTo扩展方法被重命名为
ConvertTo

只是为了将来的我:虽然我能够编译代码,但它没有复制任何东西。这是因为
Cambium
ORM返回的
DynamicModel:Gemini
,没有定义(与DTO相关的)属性(请参见下文以比较这两个
User
类)

例如,“数据访问层”中的my
User
类如下所示:

public class User : DynamicModel, IUser
{
    public User() : base() { }

    public User(object dto)
        : base(dto)
    {
    }

    public Guid InternalId { get; set; }
    public DateTime Created { get; set; }
    public bool IsBlocked { get; set; }

    public static implicit operator idata.User(User u)
    {
        idata.User result = new idata.User();
        u.CopyProperties(result);
        return result;
    }
}
因此,在DTO的末尾,我再次使用了
DynamicModel
,我的DTO
User
类是:

[Route("/user")]
[Route("/user/{Id}")]
public class User : DynamicModel
{
    public User(object dto)
        : base(dto)
    {
    }

    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
}

谢谢@esker,没有注意到另一个分支:-(但是我需要继续使用
DynamicModel
实现,因为从数据库返回的对象是
dynamic
,所以
TranslateTo
(可能是通过属性进行迭代)没有任何可复制的内容。
[Route("/user")]
[Route("/user/{Id}")]
public class User : DynamicModel
{
    public User(object dto)
        : base(dto)
    {
    }

    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
}