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