2012-06-05 35 views
1

我發現了兩個不同的如何序列化數據的例子。一個使用流而另一個不使用?序列化到流是否

stream1.Position = 0; 
StreamReader sr = new StreamReader(stream1); 
Console.Write("JSON form of Person object: "); 
Console.WriteLine(sr.ReadToEnd()); 

From MSDN

public static string ToJson(this object obj, int recursionDepth = 100) 
    { 
     JavaScriptSerializer serializer = new JavaScriptSerializer(); 
     serializer.RecursionLimit = recursionDepth; 
     return serializer.Serialize(obj); 
    } 

    public static List<T> ToListObject<T>(this string obj, int recursionDepth = 100) 
    { 
     JavaScriptSerializer serializer = new JavaScriptSerializer(); 
     serializer.RecursionLimit = recursionDepth; 
     List<T> returnList = serializer.Deserialize<List<T>>(obj); 
     return returnList; 
    } 

From StackOverflow

爲什麼要使用流作爲增加了一個步驟?

+1

您可以使用所需的工具完成工作。 –

+1

@ Boo的回答不完整;您可以使用自己需要的工具完成工作,並且您可以證明自己的合理性。 –

+0

我想指出,StackOverflow示例正在做2件不同的事情。其中一個使用'Serialize()'將一個對象轉換爲一個流,另一個使用'Deserialize()'將一個字符串(或流,但直接使用它的字符串)轉換成一個對象。流是一種更安全的內存方式,可以生成對象的直接表示,文件流和內存流是常見的。 – Nevyn

回答

1

如果您實際上正在與支持文件或網絡套接字進行交談,並且數據量很大(即您不想加載巨大的數據,則使用Stream或reader/writer API可能會比較方便內存中的string)。

基於string的API在處理少量數據時更爲方便,這在大多數AJAX/HTTP場景中都很常見。請注意,大多數串行器沒有直接將string作爲輸入/輸出顯示的API,但這對於JSON來說非常容易,這種情況很常見。

一個基本上是另一個的便利包裝。儘管我希望主要的內部代碼是基於流或者基於讀寫器的(爲了在沒有開銷的情況下允許大文檔),那麼這種方法是實現細節。

使用最適合您的用途。