2010-08-22 15 views
8

Tôi có chuỗi JSON trong MemoryStream. Tôi đang sử dụng mã sau để làm cho nó ra dưới dạng chuỗi ASCII:Cách nhanh chóng để lấy nội dung của MemoryStream dưới dạng chuỗi ASCII

MemoryStream memstream = new MemoryStream(); 
/* Write a JSON string to memstream here */ 

byte[] jsonBytes = new byte[memstream.Length]; 
memstream.Read(jsonBytes, 0, (int)memstream.Length); 

string jsonString = Encoding.ASCII.GetString(jsonBytes); 

Cách ngắn hơn/ngắn nhất để làm điều này là gì?

+0

tôi đã cố gắng cả hai phương pháp - Darin và liho1eye. Cả hai đều hoạt động tốt. Tôi ước tôi có thể đánh dấu cả hai như là câu trả lời. Tôi cảm thấy xấu khi chỉ đánh dấu một câu trả lời: | Nhưng upvoting cả :) –

+0

Có lý do nào để mã hóa chuỗi JSON thành byte, sau đó giải mã lại không? Bạn có thể muốn xem xét sử dụng một StringWriter hoặc một StringBuilder thay thế. – Guffa

+0

Khi tôi muốn đọc từ memstream, tôi đã sử dụng phương thức Read() vì một lý do nào đó và một trong những quá tải cho thấy nó ghi vào mảng byte. Vì vậy, tôi đã sử dụng một. Đây là lần đầu tiên tôi làm việc với lớp MemoryStream nên tôi không biết điều gì là tốt nhất. Tôi chỉ đi từng bước một. –

Trả lời

13

Bạn có thể sử dụng phương pháp ToArray:

using (var stream = new MemoryStream()) 
{ 
    /* Write a JSON string to stream here */ 

    string jsonString = Encoding.ASCII.GetString(stream.ToArray()); 
} 
5

new StreamReader(memstream, Encoding.ASCII).ReadToEnd()

+1

Thao tác này sẽ trả lại luồng trống nếu luồng trước đó đã được đọc đến cuối. Để khắc phục, tiền tố có "bodyStream.Seek (0, SeekOrigin.Begin);" hoặc đơn giản là "memstream.Position = 0". – Contango