无法序列化HttpWebRequest (Type 'System.Net.WebRequest+WebProx
本文关键字:System Net WebRequest+WebProx Type 序列化 HttpWebRequest | 更新日期: 2023-09-27 18:05:19
为了记录一些HTTP流量,我试图序列化System.Net.HttpWebRequest的实例。该应用程序使用MVC 3,问题代码在控制器类的一个动作方法中。
在。net Framework 4中,如果这个类被记录为serializable:
[SerializableAttribute]
public class HttpWebRequest : WebRequest,
ISerializable
下面的测试代码在指定语句处失败:
...
HttpWebRequest preapprovalRequest = (HttpWebRequest)WebRequest.Create("http://big.URL.here");
...
HttpWebResponse preapprovalResponse = (HttpWebResponse)preapprovalRequest.GetResponse();
// Serialize the request context.
IFormatter formatter = new BinaryFormatter();
MemoryStream msRequest = new MemoryStream();
formatter.Serialize(msRequest, preapprovalRequest); //<<<<< Error here.
// Reset the stream and deserialize.
msRequest.Seek(0, SeekOrigin.Begin);
HttpWebRequest duplicateRequest = (HttpWebRequest)formatter.Deserialize(msRequest);
msRequest.Close();
// Serialize the response context.
MemoryStream msResponse = new MemoryStream();
formatter.Serialize(msResponse, preapprovalResponse);
// Reset the stream and deserialize.
msResponse.Seek(0, SeekOrigin.Begin);
HttpWebResponse duplicateResponse = (HttpWebResponse)formatter.Deserialize(msResponse);
msResponse.Close();
报告的错误是:
Type 'System.Net.WebRequest+WebProxyWrapper' in Assembly
'System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
is not marked as serializable.
我试过追逐WebProxyWrapper没有快乐。只是一点无益的包袱。显式地将HttpWebRequest转换为WebRequest不会改变错误:
formatter.Serialize(msRequest, (WebRequest)preapprovalRequest);
好的一面是,代码正确地序列化和反序列化了HttpWebResponse的实例。
我怎么能丢掉包装纸?有没有更好的方法?
微软的官方回答:
谢谢你的反馈。不幸的是,HttpWebRequest丢失了. net 1.1之后对序列化的支持。看到http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.httpwebrequest (v = VS.100) . aspx
我们将看看是否可以删除该属性以避免这种混淆在未来。
他们修改了文档以包含[ObsoleteAttribute]属性
试一试:
[Serializable()]
public class MyClass
{
//your serializable class
}