2012-06-05 33 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来说非常容易,这种情况很常见。

一个基本上是另一个的便利包装。尽管我希望主要的内部代码是基于流或者基于读写器的(为了在没有开销的情况下允许大文档),那么这种方法是实现细节。

使用最适合您的用途。