【问题标题】:serialize to stream or not序列化是否流式传输
【发布时间】:2012-06-06 03:30:04
【问题描述】:

我发现了两个关于如何序列化数据的不同示例。一个使用流,另一个不使用?

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

为什么要使用 Stream 作为附加步骤?

【问题讨论】:

  • 你使用你需要的东西来完成工作。
  • @Boo 的回答不完整;你使用你需要的东西来完成工作,并且你可以证明。
  • 我想指出 StackOverflow 示例正在做两件不同的事情。其中一个使用Serialize() 将对象转换为流,另一个使用Deserialize() 将字符串(或流,但它只是直接使用字符串)转换为对象。 Stream 是一种更内存安全的方式来生成对象的直接表示,文件流和内存流对此很常见。

标签: c#


【解决方案1】:

如果您实际上正在与诸如文件或网络套接字之类的支持进行通信,并且数据很大(即您不想加载巨大的 @ 987654321@ 在内存中)。

基于string 的 API 在处理少量数据时更方便,这在大多数 AJAX/HTTP 场景中都很常见。请注意,大多数序列化程序没有直接将 string 公开为输入/输出的 API,但这是 JSON 的常见场景,因此对您来说很容易。

一个基本上是另一个的方便包装。哪种方式是实现细节,尽管我希望主要的内部代码是基于流或读取器/写入器的(以允许没有开销的大型文档)。

使用最适合您的目的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2020-05-26
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多