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

时间:2011-02-04 13:47:04

标签: c# json serialization rest dto

这个问题建立在早期问题的基础上(尽管是偏离主题的)I asked yesterday。 请先读一读。

好的 - 在我的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的方式相同。

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我可能在这里误解了一些事情,但你要做的事情是倒退。你首先得到你的域对象,然后转换为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);
}

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