簡體   English   中英

在ASP.NET中的Session對象上插入后,Serializable類中的屬性是否會自動序列化?

[英]Are properties within a Serializable class automatically serialized when inserted on Session object in ASP.NET?

我有一個使用InProc會話狀態模式的ASP.NET應用程序。 我有一個標記為可序列化的類:

namespace MyNamespace
{
    [Serializable]
    public class MyClass
    {
        public System.Web.Mvc.SelectList myList { get; set; }
    }
}

...現在我有一個疑問:將序列化類中的屬性值分配給會話對象時,如下所示:

Session["MyList"] = InstaceOfMyClass.myList;

...將myList屬性插入到Session [“ MyList”]對象后是否自動序列化?

如果未序列化,如何在插入Session [“ MyList”]對象時對其進行序列化? 通過指示具有可序列化屬性的屬性?

如果僅是在進程內,則不會發生序列化,該項目將作為對.NET對象的常規實時引用存儲,而不會發生序列化。

如果您的會話狀態是外部的(例如數據庫),那么顯然必須在那時將它們序列化。

關於您的特定點,您在做什么與手動創建SelectList對象並將其傳遞到會話之間沒有區別。

如果我是您,我強烈建議您不要在會話中存儲此類對象,請嘗試將其保存在您控制的類中(並可以標記為Serializable ),因為如果您確實需要切換到流程存儲,則無需重新設計代碼。

序列化和將模型(以及一些額外的數據)從控制器傳遞到視圖(如System.Web.Mvc.SelectList所示)是兩個非常不同的事情。

序列化與將對象轉換為字符串(或二進制數組)並將反序列化從字符串(或二進制數組)返回到對象有關。

視圖應呈現在MVC上來回傳遞的模型。 您可能正在尋找該模型中的單個屬性(例如countryID),該屬性將顯示在下拉列表(或html <select>或更籠統的組合框)中。 這捆包裝數據(例如-國家/地區列表-ID和名稱對)應通過ViewBag或ViewData傳遞。

SelectList不應在會話上完成,因為存儲它會浪費大量內存。 用戶收到HttpResponse之后,它就會在內存中徘徊很長時間。 選擇列表只是組合框中選項的列表,因此它不能序列化(盡管它的內容可能是)。 您應該真正區分“居住在組合框中的數據”(瘦對象)和“組合框本身”(胖對象)。 在此示例中-在國家(這是IEnumerable)與UI元素之間。 序列化UI元素沒有意義,應始終避免。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM