2011-08-12 47 views
-1

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實例。

我怎麼能失去了包裝?有更好的方法嗎?

+0

答案是*您不能序列HttpWebRequest和你不應該這樣做。* **的**真正的問題涉及到*爲什麼*您正試圖做到這一點。 – Will

+0

當發生錯誤或意外事件時,記錄我的請求和PayPal的回覆似乎並不合理,例如一個新的名稱/值對,回來了迴應。試圖序列化記錄爲具有[SerializableAttribute]的東西似乎也不合理。你是否在暗示微軟可能在他們的文檔中犯了錯誤? – HABO

+0

但是你沒有序列化這個類,就像你發現的那樣。你正在序列化別的東西。可以從請求中獲取字節並保存這些*,這實質上就是您希望在沒有序列化請求/響應對象的開銷的情況下執行的操作。 – Will

回答

0

給這一個鏡頭:

[Serializable()] 
public class MyClass 
{ 
    //your serializable class 
} 
+0

問題實例是一個方法中的變量,而不是另一個類的屬性。 (HttpWebRequest的preapprovalRequest =(HttpWebRequest的)WebRequest.Create( 「http://horrific.URL.here」); )的方法,是在MVC控制器的動作。在控制器類上嘗試[Serializable]不會改變結果。我也不期望它實際上是可序列化的。 – HABO

+0

錯誤似乎表明包裝未標記爲可序列化。你能提供更多的背景嗎? –

+0

爲了縮小話語範圍,我將測試代碼移至最小控制檯應用程序。錯誤沒有改變,這導致我相信這不可能是我的課程中的一個問題。通過上下文:代碼構建一個發送到PayPal的HTTP請求,如果沒有發現它,則生成並返回響應。由於PayPal有時會做不可預測的事情,所以我希望能夠記錄一些特殊情況。就是這樣。 – HABO

相關問題