StreamReader.ReadToEnd Не работает в C #? - PullRequest
2 голосов
/ 25 февраля 2012

Я пытаюсь сериализовать экземпляр класса Person:

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Soap;


[Serializable]
public class Person
{
    public string FirstName{ get; set; }
    public string MiddleName{ get; set; }
    public string LastName{ get; set; }
}

Сначала я сериализовал объект в JSON и записал его в MemoryStream, затем преобразовал его в строку для отображения на странице.

@using System.Runtime.Serialization.Json
@using System.Text


@{ Layout = null; 

    Person person = new Person();
    person.FirstName = "John";
    person.MiddleName = "Parker";
    person.LastName = "Santos";

    MemoryStream s = new MemoryStream();
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(Person));
    ser.WriteObject(s, person);
    string ss;

    using(StreamReader sr = new StreamReader(s, new UnicodeEncoding(), false))
    {
        ss = sr.ReadToEnd();
    }
}

@ss 

Я ожидаю, что последняя строка напечатает JSON-формат объекта, но это не так.Я подозреваю, что StreamReader не работает, так как MemoryStream s имеет длину, которая, как я предполагаю, уже содержит данные, в то время как ss имеет длину 0. Что я делаю неправильно?

1 Ответ

7 голосов
/ 25 февраля 2012

Вы должны установить позицию вашего потока памяти обратно в начало перед чтением.

s.Position = 0;

Должна исправить вашу проблему.Смотри: http://msdn.microsoft.com/en-us/library/system.io.memorystream.position.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...