Possible Duplicate:
HttpWebRequest Won't Serialize无法序列HttpWebRequest的(类型“System.Net.WebRequest + WebProxyWrapper”未标记为可序列化。)
为了记录我试图序列System.Net的实例一些HTTP流量。 HttpWebRequest的。应用程序使用MVC 3,问题代码位于控制器类的操作方法中。
在.NET框架4它的类是documented为可序列:
[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和你不应该这样做。* **的**真正的问题涉及到*为什么*您正试图做到这一点。 – Will
当发生错误或意外事件时,记录我的请求和PayPal的回复似乎并不合理,例如一个新的名称/值对,回来了回应。试图序列化记录为具有[SerializableAttribute]的东西似乎也不合理。你是否在暗示微软可能在他们的文档中犯了错误? – HABO
但是你没有序列化这个类,就像你发现的那样。你正在序列化别的东西。可以从请求中获取字节并保存这些*,这实质上就是您希望在没有序列化请求/响应对象的开销的情况下执行的操作。 – Will