Как преобразовать String в поток System.IO.Stream?
System.IO.Memorystream требует на входе байтовый буфер Bytes(), а у меня String. Нужно преобразовывать (как?) или есть какой-то другой выход?
Не совсем понимаю, для каких задач вам это надо, но массив байт из строки
можно получить например так:
System.Text.Encoding.UTF32.GetBytes(string); //Подразумевается, что кодировка строки - UTF32
Еще посмотрите в сторону System.IO.StringStream, возможно для Вашей задачи он подойтет больше.
Или возможно System.IO.TextWriter, если строку нужно писать в поток.
Re[2]: Как преобразовать String в System.IO.Stream
Здравствуйте, RushDevion, Вы писали:
RD>Не совсем понимаю, для каких задач вам это надо, но массив байт из строки RD>можно получить например так: RD>
RD>System.Text.Encoding.UTF32.GetBytes(string); //Подразумевается, что кодировка строки - UTF32
RD>
RD>Еще посмотрите в сторону System.IO.StringStream, возможно для Вашей задачи он подойтет больше. RD>Или возможно System.IO.TextWriter, если строку нужно писать в поток.
Это нужно для XML десериализации объекта пришедшего как string. Дерсериализатор в качестве параметра принимает поток System.IO.Stream. Через encodong пробовал, не работает.
Здравствуйте, Slider_spb, Вы писали:
S_>Как преобразовать String в поток System.IO.Stream? S_>System.IO.Memorystream требует на входе байтовый буфер Bytes(), а у меня String. Нужно преобразовывать (как?) или есть какой-то другой выход?
string str = "...";
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms);
sw.Write(str);
Re[2]: Как преобразовать String в System.IO.Stream
Здравствуйте, QrystaL, Вы писали:
QL>Здравствуйте, Slider_spb, Вы писали:
S_>>Как преобразовать String в поток System.IO.Stream? S_>>System.IO.Memorystream требует на входе байтовый буфер Bytes(), а у меня String. Нужно преобразовывать (как?) или есть какой-то другой выход?
QL>
QL>string str = "...";
QL>MemoryStream ms = new MemoryStream();
QL>StreamWriter sw = new StreamWriter(ms);
QL>sw.Write(str);
QL>
Сделал так.
Дальше в строке
Obj = SoapFormatter.Deserialize(ms)
Ошибка "Root element is missing"
Если положить содердимое str в файл и десерилизовать так, как показано в примере из MSDN, т.е. из файла — всё работает.
Re[3]: Как преобразовать String в System.IO.Stream
S_>Сделал так. S_>Дальше в строке S_>Obj = SoapFormatter.Deserialize(ms) S_>Ошибка "Root element is missing" S_>Если положить содердимое str в файл и десерилизовать так, как показано в примере из MSDN, т.е. из файла — всё работает.
Попробуйте перед этим сделать
ms.Seek(0, SeekOrigin.Begin);
Re[4]: Как преобразовать String в System.IO.Stream
Здравствуйте, QrystaL, Вы писали:
S_>>Сделал так. S_>>Дальше в строке S_>>Obj = SoapFormatter.Deserialize(ms) S_>>Ошибка "Root element is missing" S_>>Если положить содердимое str в файл и десерилизовать так, как показано в примере из MSDN, т.е. из файла — всё работает.
QL>Попробуйте перед этим сделать
QL>
QL>ms.Seek(0, SeekOrigin.Begin);
QL>
Да, логично, перед тем как считывать надо в начальную позицию сдвинуть. Добавил.
Ошибка изменилиась на "Unexpected end of file while parsing Name has occurred. Line 146, position 15."
Re[5]: Как преобразовать String в System.IO.Stream
Здравствуйте, Slider_spb, Вы писали:
S_>Здравствуйте, QrystaL, Вы писали:
S_>>>Сделал так. S_>>>Дальше в строке S_>>>Obj = SoapFormatter.Deserialize(ms) S_>>>Ошибка "Root element is missing" S_>>>Если положить содердимое str в файл и десерилизовать так, как показано в примере из MSDN, т.е. из файла — всё работает.
QL>>Попробуйте перед этим сделать
QL>>
QL>>ms.Seek(0, SeekOrigin.Begin);
QL>>
S_>Да, логично, перед тем как считывать надо в начальную позицию сдвинуть. Добавил. S_>Ошибка изменилиась на "Unexpected end of file while parsing Name has occurred. Line 146, position 15."
Записываю str как файл через файловый поток, открываю его снова, даю на вход сериализатору — всё работает. Может soap десериализатор принципиально не может работать ни с каими потоками, кроме как FileStream?
Что так и оставить? это же бред...
Re[6]: Как преобразовать String в System.IO.Stream
S_>>Да, логично, перед тем как считывать надо в начальную позицию сдвинуть. Добавил. S_>>Ошибка изменилиась на "Unexpected end of file while parsing Name has occurred. Line 146, position 15." S_>Записываю str как файл через файловый поток, открываю его снова, даю на вход сериализатору — всё работает. Может soap десериализатор принципиально не может работать ни с каими потоками, кроме как FileStream?
Может. Я проверял.
S_>Что так и оставить? это же бред...
Для раздебаживания проблемы советую создать новый класс, отнаследоваться от Stream. Перегнать строку в байты. Перепробовать ASCII, UTF16, UTF32.
Поставить брейк в фукнции Read(buffer, start, count) и смотреть в отладчике, что же отдаётся десериализатору и на каком куске его заглючит.
Re[3]: Как преобразовать String в System.IO.Stream
Здравствуйте, Slider_spb, Вы писали:
S_>Это нужно для XML десериализации объекта пришедшего как string. Дерсериализатор в качестве параметра принимает поток System.IO.Stream. Через encodong пробовал, не работает.
Здравствуйте, Kore Sar, Вы писали:
KS>Здравствуйте, Slider_spb, Вы писали:
S_>>>Да, логично, перед тем как считывать надо в начальную позицию сдвинуть. Добавил. S_>>>Ошибка изменилиась на "Unexpected end of file while parsing Name has occurred. Line 146, position 15." S_>>Записываю str как файл через файловый поток, открываю его снова, даю на вход сериализатору — всё работает. Может soap десериализатор принципиально не может работать ни с каими потоками, кроме как FileStream?
KS>Может. Я проверял.
А можете рабочий примерчик выслать? Может при сравнении что-нибудь удасться выявить...
Re[7]: Как преобразовать String в System.IO.Stream
Здравствуйте, Kore Sar, Вы писали:
KS>Для раздебаживания проблемы советую создать новый класс, отнаследоваться от Stream. Перегнать строку в байты. Перепробовать ASCII, UTF16, UTF32. KS>Поставить брейк в фукнции Read(buffer, start, count) и смотреть в отладчике, что же отдаётся десериализатору и на каком куске его заглючит.
Выяснил, что поток memorystream начиная с 6333 байта вместо данных начинает отдавать нули. Но по какой причине — пока понять не могу.
Re[8]: Как преобразовать String в System.IO.Stream
Здравствуйте, Slider_spb, Вы писали:
S_>Здравствуйте, Kore Sar, Вы писали:
KS>>Для раздебаживания проблемы советую создать новый класс, отнаследоваться от Stream. Перегнать строку в байты. Перепробовать ASCII, UTF16, UTF32. KS>>Поставить брейк в фукнции Read(buffer, start, count) и смотреть в отладчике, что же отдаётся десериализатору и на каком куске его заглючит. S_>Выяснил, что поток memorystream начиная с 6333 байта вместо данных начинает отдавать нули. Но по какой причине — пока понять не могу.
Выяснил я в чём дело, надо было добавить в поток StreamWriter метод Flush(), иначе часть данных не одавалась при чтении из потока MemoryStream.
Re[9]: Как преобразовать String в System.IO.Stream
Здравствуйте, Slider_spb, Вы писали:
S_>Здравствуйте, Slider_spb, Вы писали:
S_>>Здравствуйте, Kore Sar, Вы писали:
KS>>>Для раздебаживания проблемы советую создать новый класс, отнаследоваться от Stream. Перегнать строку в байты. Перепробовать ASCII, UTF16, UTF32. KS>>>Поставить брейк в фукнции Read(buffer, start, count) и смотреть в отладчике, что же отдаётся десериализатору и на каком куске его заглючит. S_>>Выяснил, что поток memorystream начиная с 6333 байта вместо данных начинает отдавать нули. Но по какой причине — пока понять не могу. S_>Выяснил я в чём дело, надо было добавить в поток StreamWriter метод Flush(), иначе часть данных не одавалась при чтении из потока MemoryStream.