我无法理解如何将动态对象添加到会话变量中。编辑:我不认为我解释得很好。让我再试一次。
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 :(得分:2)
听起来你可能正在寻找ExpandoObject课程。该类实现IDictionary<string, object>
,允许它存储名称/值对。它还实现了IDynamicMetaObjectProvider
;此实现允许您通过dynamic
类型(在C#4.0及更高版本中)使用普通的“点”语法来读取和写入在编译时名称已知的属性(即{{1} })。
此示例假定您有一个函数variable.Member
,它返回带有属性名称和值的GetPropertyValues()
:
IEnumerable<KeyValuePair<string, object>>
例如,如果您知道该对象具有var obj = new ExpandoObject();
var propertyValues = GetPropertyValues();
foreach (var nameValuePair in propertyValues)
obj[nameValuePair.Key] = nameValuePair.Value;
HttpContext.Current.Session[Object1] = obj;
属性和ID
属性,则可以像这样使用它:
Status
答案 1 :(得分:0)
声明会话变量的语法是
session[VariableName] = Value;
检索会话的值
string strValueFromSession = session[VariableName].ToString();
每次想要刷新时都要记住,你必须再次存储它。
答案 2 :(得分:0)
我不认为对象本身是从数据库动态生成的。从数据库中填充对象的可能性更大,在这种情况下,您可以像在其他任何地方一样存储在会话中:
Session["MyObject"] = someObject; //your object
要从会话中检索项目,您将使用强制转换:
var obj = Session["MyObject"] as MyObject;
if (obj != null)
{
Response.Write(obj.SomeProperty);
}
答案 3 :(得分: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;