2012-04-03 85 views
0

我無法理解如何將動態對象添加到會話變量。編輯:我覺得我沒有足夠的自我解釋。讓我再嘗試一次。動態C#對象會話變量?

Example: 
Object1 
Property1 = Value1 
Property2 = Value2 
Property3 = Value3 
(All of which are generated dynamically from the database.) 

object obj = new object(); 
obj.add(property = value) // Not sure of syntax, but I'd be looping this to add stuff. 
// Then when it's done looping... 
HttpContext.Current.Session[Object1] = obj; 
+0

什麼問題?您定義一個類,實例化它,設置它的屬性並將其放入會話中。如果你有一個數據庫中的值列表,那麼你使用集合等...... – 2012-04-03 17:18:20

+0

你能告訴你想要完成給定的現有代碼片段,並解釋爲什麼你需要存儲會話對象? – Turbot 2012-04-03 17:19:18

+0

@DarinDimitrov做了修改,現在可能更清楚了嗎? – Ber53rker 2012-04-03 17:36:52

回答

0

ASP.net Forum

的語法來聲明一個會話變量是

session[VariableName] = Value; 

要檢索會議

string strValueFromSession = session[VariableName].ToString(); 

值記住每次要刷新,你將不得不再次存儲它。

0

我不認爲對象本身是從數據庫動態生成的。它更可能的是,對象是從數據庫填充,在這種情況下,你會在會話存儲就像別的:

Session["MyObject"] = someObject; //your object 

爲了取回會議的項目,你可以使用一個投:

var obj = Session["MyObject"] as MyObject; 
if (obj != null) 
{ 
    Response.Write(obj.SomeProperty); 
} 
0
class DynamicClass 
{ 
    public String DynamicObject; 
} 

public dynamic DynamicProperty 
{ 
    get 
    { 
     return Session["Dynamic"]; 
    } 
    set 
    { 
     Session["Dynamic"] = value; 
    } 
} 

DynamicClass d = new DynamicClass(); 
d.DynamicObject = "Hi"; 
dynamic Obj = d; 
DynamicProperty = Obj; 
2

這聽起來像你可能正在尋找ExpandoObject類。該類實現IDictionary<string, object>,允許它存儲名稱/值對。它也實現了IDynamicMetaObjectProvider;此實現允許您通過dynamic類型(在C#4.0及更高版本中)使用正常的「點」語法來讀取和編寫在編譯時已知的屬性(即variable.Member)。

這個例子假設你有一個函數GetPropertyValues()返回一個IEnumerable<KeyValuePair<string, object>>與屬性的名稱和值:如果你知道對象有一個ID屬性和Status特性,例如

var obj = new ExpandoObject(); 
var propertyValues = GetPropertyValues(); 

foreach (var nameValuePair in propertyValues) 
    obj[nameValuePair.Key] = nameValuePair.Value; 

HttpContext.Current.Session[Object1] = obj; 

,你可以這樣使用它:

dynamic obj = HttpContext.Current.Session[Object1]; 
var identifier = obj.ID; // basically the same as var ID = obj["ID"]; 
obj.Status = GetStatusForID(identifier); 

//you can also add properties just by writing to them: 
obj.ThisPropertyMightNotExist = "moo"; 
HttpContext.Current.Session[Object1] = obj;