这个问题建立在早期问题的基础上(尽管是偏离主题的)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格式的字符串)到客户端???
感谢您的帮助。
答案 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。