【问题标题】:Is FtpWebRequest class Serializable ?FtpWebRequest 类是可序列化的吗?
【发布时间】:2011-08-22 18:03:55
【问题描述】:

我想序列化一个 FtpWebRequest 类的实例。可能吗?当我尝试时,它给了我一个错误,即类未标记为可序列化,这意味着我无法序列化对象,但在 msdn 文档中,他们提到了 ISerializable.GetObjectData 的显式实现

http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest_members(v=vs.90).aspx

这是什么意思?我可以序列化它吗?困惑请帮忙

【问题讨论】:

    标签: c# serialization


    【解决方案1】:

    不,不是。虽然它继承了ISerializable,但它缺少必要的序列化构造函数。但也许更好的问题是:

    在什么情况下可能有意义序列化?

    我想不出一个。 request 是一个 operational 类;最好序列化 data(系统的 state)——而不是让它工作的旋转齿轮。出于同样的原因,我不会尝试序列化连接、文件流等。

    弄清楚你需要知道哪些数据才能让你的系统恢复到必要的状态;序列化数据。

    【讨论】:

    • 我遇到了一个奇怪的问题,因此我想如果可能的话我可以序列化 FtpWebRequest。场景是:-stackoverflow.com/questions/7144180/…
    • @Deepesh 我个人不认为序列化是解决这个问题的方法
    • 我在想的是,当我上传文件并收到网络断开的错误时,我序列化对象,当下次用户尝试上传文件时,我反序列化对象并关闭最后打开的文件流,因此我收到拒绝访问错误。
    【解决方案2】:

    不是,方法是这样解释的:

    基础设施。在后代类中重写时,使用序列化 WebRequest 所需的数据填充 SerializationInfo 实例。 (继承自 WebRequest。)

    这意味着它是一种基础结构方法(由 .NET 代码在内部使用)。 WebRequest 类是可序列化的,它需要直接从此类或FtpWebRequest 的基类中序列化数据。

    点击链接甚至说:

    此 API 支持 .NET Framework 基础结构,不打算直接从您的代码中使用。

    【讨论】:

    • 公平地说,GetObjectData 和匹配的构造函数从不打算直接从您的代码中使用....(它本身并不直接绑定到是否可序列化)
    【解决方案3】:

    根据我的理解,FtpWebrequest 类允许您与服务器交互,但 GetObjectData 方法要求正在检索的对象必须是可序列化的,原因很明显。看看这个问题,看看它是如何实现的:

    Stackoverflow question

    【讨论】:

      猜你喜欢
      • 2014-09-24
      • 2016-07-12
      • 1970-01-01
      • 2016-11-16
      • 2016-05-22
      • 2013-02-22
      • 2011-12-01
      • 1970-01-01
      相关资源
      最近更新 更多