动态C#对象到会话变量?

时间:2012-04-03 17:15:23

标签: c# asp.net session

我无法理解如何将动态对象添加到会话变量中。编辑:我不认为我解释得很好。让我再试一次。

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;

4 个答案:

答案 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)

来自ASP.net Forum

声明会话变量的语法是

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;