как преобразовать System.IO.Stream в строку, а затем обратно в System.IO.Stream

Имею недвижимость типа Stream

public System.IO.Stream UploadStream { get; set; }

Как я могу преобразовать его в string и отправить на другую сторону, где я могу снова преобразовать его в System.IO.Stream?


person SOF User    schedule 30.11.2010    source источник


Ответы (2)


Я не знаю, что вы имеете в виду под преобразованием потока в строку. И какова другая сторона?

Чтобы преобразовать поток в строку, вам необходимо использовать кодировку. Вот пример того, как это можно сделать, если предположить, что поток представляет байты в кодировке UTF-8:

using (var reader = new StreamReader(foo.UploadStream, Encoding.UTF8))
{
    string value = reader.ReadToEnd();
    // Do something with the value
}
person Darin Dimitrov    schedule 30.11.2010
comment
проблема в том, что я использую это строковое значение и отправляю его другой стороне с помощью XML-серлизации, это дает ошибку [XmlElement (UploadStream)] общедоступная строка UploadStream {get; набор; } - person SOF User; 30.11.2010
comment
Похоже, вы пытаетесь сериализовать поток в XML. В этом случае опишите подробнее свой сценарий. Куда вы пытаетесь отправить этот сериализованный XML? - person Darin Dimitrov; 30.11.2010
comment
Фактически мы работаем над приложением Silverlight и используя службы RIA, созданные клиентом с помощью этой службы, мы отправляем строку в наше приложение asp.net. - person SOF User; 30.11.2010
comment
теперь простой запрос находится на стороне Silverlight. У меня есть файл объекта потока, я хочу, чтобы он отправлялся на эту сторону через строковые значения. Я решил, что сначала конвертирую stram-объект в строку, а затем заверну в xml-объект - person SOF User; 30.11.2010
comment
@SOFUser, возможно, вам следует отредактировать свой вопрос, чтобы включить в него более подробную информацию и, возможно, образец кода того, что вы пытаетесь сделать. Это может помочь вам получить более точные ответы, которые вы ищете. Ваш вопрос довольно расплывчатый, и мы не сможем помочь вам диагностировать возникающую ошибку без более подробной информации. - person bbosak; 14.10.2011

После некоторого поиска другие ответы на этот вопрос предполагают, что вы можете сделать это, не зная / не используя кодировку строки. Поскольку поток состоит только из байтов, эти решения в лучшем случае ограничены. Это решение учитывает кодировку:

    public static String ToEncodedString(this Stream stream, Encoding enc = null)
    {
        enc = enc ?? Encoding.UTF8;

        byte[] bytes = new byte[stream.Length];
        stream.Position = 0;
        stream.Read(bytes, 0, (int)stream.Length);
        string data = enc.GetString(bytes);

        return enc.GetString(bytes);
    }

источник - http://www.dotnetfunda.com/codes/show/130/how-to-convert-stream-into-string

Строка для потока - https://stackoverflow.com/a/35173245/183174

person LostNomad311    schedule 13.07.2018
comment
Это не работает с ReadOnlyStream: этот поток не поддерживает операции поиска. - person Chuck D; 01.07.2019