WCF REST序列化之前的System.IO.Stream到数据传输对象?

问题描述:

这个问题建立在前面的问题上(虽然是题外话)I asked yesterday。 请先给它一个阅读。WCF REST序列化之前的System.IO.Stream到数据传输对象?

好的 - 在我的WCF REST项目中,我在将JSON序列化到移动客户端之前将域对象转换为数据传输对象(DTO)。例如,这里是我的用户DTO:

[DataContract] 
public class UserDto 
{ 
    [DataMember] 
    public string UserId { get; set; } 

    [DataMember] 
    public string UserName { get; set; } 

    [DataMember] 
    public string Email { get; set; } 

    [DataMember] 
    public string Password { get; set; } 

} 

而且在我User.svc的服务,UserDto被序列化回客户端这样:

public UserDto GetUserById(string userid) 
     { 
      var obj = UserRepository.GetUserById(userid); 
      return new Contracts.UserDto 
      { 
       Email = obj.Email.ToString(), 
       Password = obj.Password.ToString(), 
       UserId = obj.UserId.ToString(), 
       UserName = obj.UserName.ToString() 
      }; 
     } 

现在,我有一个基类,公开以下方法:

public virtual Stream GetGroupById(string id) 

我的Dashboard.svc服务。它返回如下:

return new MemoryStream(bytes); 

在这个服务,我想覆盖的方法,并在我的序列化我的上述UserDto以同样的方式 将结果返回给客户端。

我的问题是 - 你如何转换类型流的方法为数据传输对象和序列化的结果(作为JSON格式的字符串)到客户端???

感谢您的帮助。

我可能会误解这里的东西,但是你想要做的是倒退。你会先得到你的域对象,然后转换为DTO,然后写连载DTO到流:

public virtual Stream GetGroupById(string id) 
{ 
    var user = UserRepository.GetUserById(id); 
    var dto = new Contracts.UserDto 
       { 
        Email = user.Email.ToString(), 
        Password = user.Password.ToString(), 
        UserId = user.UserId.ToString(), 
        UserName = user.UserName.ToString() 
       } 

    var serializer = new JavaScriptSerializer()l 
    var bytes = Encoding.UTF8.GetBytes(serializer.Serialize(dto)); 

    return new MemoryStream(bytes); 
} 

的流被返回给客户端将包含JSON的序列化的DTO。