Как преобразовать String в System.IO.Stream
От: Slider_spb Россия  
Дата: 26.06.09 11:40
Оценка:
Как преобразовать String в поток System.IO.Stream?
System.IO.Memorystream требует на входе байтовый буфер Bytes(), а у меня String. Нужно преобразовывать (как?) или есть какой-то другой выход?
Re: Как преобразовать String в System.IO.Stream
От: RushDevion Россия  
Дата: 26.06.09 11:46
Оценка:
Не совсем понимаю, для каких задач вам это надо, но массив байт из строки
можно получить например так:
System.Text.Encoding.UTF32.GetBytes(string); //Подразумевается, что кодировка строки - UTF32

Еще посмотрите в сторону System.IO.StringStream, возможно для Вашей задачи он подойтет больше.
Или возможно System.IO.TextWriter, если строку нужно писать в поток.
Re[2]: Как преобразовать String в System.IO.Stream
От: Slider_spb Россия  
Дата: 26.06.09 11:53
Оценка:
Здравствуйте, 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 пробовал, не работает.
Re: Как преобразовать String в System.IO.Stream
От: QrystaL Украина  
Дата: 26.06.09 12:03
Оценка: +1
Здравствуйте, 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
От: Slider_spb Россия  
Дата: 26.06.09 13:14
Оценка:
Здравствуйте, 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
От: QrystaL Украина  
Дата: 26.06.09 13:18
Оценка:
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
От: Slider_spb Россия  
Дата: 26.06.09 13:22
Оценка:
Здравствуйте, 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 Россия  
Дата: 26.06.09 13:50
Оценка:
Здравствуйте, 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
От: Kore Sar  
Дата: 27.06.09 07:54
Оценка:
Здравствуйте, Slider_spb, Вы писали:


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
От: adontz Грузия http://adontz.wordpress.com/
Дата: 27.06.09 10:28
Оценка:
Здравствуйте, Slider_spb, Вы писали:

S_>Это нужно для XML десериализации объекта пришедшего как string. Дерсериализатор в качестве параметра принимает поток System.IO.Stream. Через encodong пробовал, не работает.


StringReader
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[7]: Как преобразовать String в System.IO.Stream
От: Slider_spb Россия  
Дата: 29.06.09 07:01
Оценка:
Здравствуйте, 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
От: Slider_spb Россия  
Дата: 29.06.09 08:34
Оценка:
Здравствуйте, Kore Sar, Вы писали:

KS>Для раздебаживания проблемы советую создать новый класс, отнаследоваться от Stream. Перегнать строку в байты. Перепробовать ASCII, UTF16, UTF32.

KS>Поставить брейк в фукнции Read(buffer, start, count) и смотреть в отладчике, что же отдаётся десериализатору и на каком куске его заглючит.
Выяснил, что поток memorystream начиная с 6333 байта вместо данных начинает отдавать нули. Но по какой причине — пока понять не могу.
Re[8]: Как преобразовать String в System.IO.Stream
От: Slider_spb Россия  
Дата: 29.06.09 09:10
Оценка:
Здравствуйте, 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
От: Kore Sar  
Дата: 29.06.09 11:06
Оценка:
Здравствуйте, 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.

Мои поздравления.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.