2012-02-25 58 views
2

我試圖序列化Person類的一個實例:StreamReader.ReadToEnd不在C#中工作?

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有一個長度,我認爲數據已經存在,而ss長度爲0.我做錯了什麼?

回答

6

在閱讀之前,您必須將您的內存流的位置重新設置爲開頭。

s.Position = 0;

應該解決您的問題。請參閱:http://msdn.microsoft.com/en-us/library/system.io.memorystream.position.aspx

+0

:D非常感謝!我之前看到了Position屬性並忽略了它,我認爲流的位置已經是0了。也許'WriteObject'方法導致位置改變,不是嗎? – dpp 2012-02-25 07:07:19

+0

準確地說,一個寫和讀共享流中的相同位置。 – Polity 2012-02-25 07:08:54