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。