Динамический объект C # в переменную сеанса? - PullRequest
0 голосов
/ 03 апреля 2012

У меня проблемы с пониманием того, как мне нужно добавить динамический объект в переменную сеанса. РЕДАКТИРОВАТЬ: Я не думаю, что я объяснил себя достаточно хорошо. Позвольте мне попробовать еще раз.

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 ]

2 голосов
/ 03 апреля 2012

Похоже, вы искали класс ExpandoObject .Этот класс реализует IDictionary<string, object>, позволяя ему хранить пары имя / значение.Он также реализует IDynamicMetaObjectProvider;эта реализация позволяет вам с помощью типа dynamic (в C # 4.0 и выше) использовать обычный синтаксис «точка» для чтения и записи свойств, имена которых известны во время компиляции (то есть 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, например, вы можете использовать его так:

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;
0 голосов
/ 03 апреля 2012

Я не думаю, что сами объекты динамически генерируются из базы данных.Скорее всего, объекты заполняются из базы данных, и в этом случае вы будете хранить в сеансе, как и все остальное:

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

Чтобы извлечь элемент из сеанса, вы должны использовать приведение:

var obj = Session["MyObject"] as MyObject;
if (obj != null)
{
    Response.Write(obj.SomeProperty);
}
0 голосов
/ 03 апреля 2012
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;
0 голосов
/ 03 апреля 2012

Из ASP.net Forum

Синтаксис для объявления переменной сеанса:

session[VariableName] = Value;

Чтобы получить значение для сеанса

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

Имейте в виду, что каждый раз, когда вы хотите обновить его, вам придется хранить его снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...