System.IO.Stream в объект передачи данных до сериализации REST WCF? - PullRequest
0 голосов
/ 04 февраля 2011

Этот вопрос основан на более раннем вопросе (хотя и не по теме) Я задал вчера .Сначала прочтите его.

ОК - в моем проекте WCF REST я преобразовывал свои доменные объекты в объекты передачи данных (DTO) до сериализации JSON для мобильных клиентов.Например, вот мой пользовательский 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.

МОЙ ВОПРОС IS - как преобразовать метод типа Stream в объект передачи данных и сериализовать результаты (в виде строки в формате JSON) клиенту ???

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 04 февраля 2011

Я мог бы неправильно понимать вещи здесь, но то, что вы пытаетесь сделать, это назад. Сначала вы получите свой доменный объект, затем преобразуете в 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.

...