2012-04-03 8 views
0

Ich habe Probleme zu verstehen, wie ich ein dynamisches Objekt zu einer Sitzungsvariablen hinzufügen sollte. EDIT: Ich glaube nicht, dass ich mich gut genug erklärt habe. Lass mich es nochmal versuchen.Dynamisches C# -Objekt zu Sitzungsvariable?

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

Was ist das Problem? Sie definieren eine Klasse, instanziieren sie, legen ihre Eigenschaften fest und legen sie in die Sitzung ein. Wenn Sie eine Liste von Werten aus der Datenbank haben, dann verwenden Sie Sammlungen und so weiter ... –

+0

Können Sie sagen, was Sie mit dem vorhandenen Code-Snippet erreichen wollen und erklären, warum Sie das Session-Objekt speichern müssen? – Turbot

+0

@DarinDimitrov Hat eine Revision gemacht, vielleicht ist es jetzt klarer? – Ber53rker

Antwort

0

Von ASP.net Forum

Die Syntax einer Session-Variablen zu deklarieren ist

session[VariableName] = Value; 

Um den Wert für die Sitzungs

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

Beachten Sie abrufen jedes Mal wenn Sie es aktualisieren möchten Sie müssen es erneut speichern.

0

Ich glaube nicht, dass die Objekte selbst dynamisch aus der Datenbank generiert werden. Es ist wahrscheinlicher, dass die Objekte aus der Datenbank gefüllt werden, in welchem ​​Fall man sonst wie alles in der Sitzung speichern, in würde:

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

Um das Element von Sitzung abzurufen, würde verwenden Sie eine Besetzung:

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

Es klingt, als ob Sie nach der Klasse ExpandoObject suchen könnten. Diese Klasse implementiert IDictionary<string, object> und ermöglicht das Speichern von Name/Wert-Paaren. Es implementiert auch IDynamicMetaObjectProvider; Diese Implementierung ermöglicht es Ihnen, über den Typ dynamic (in C# 4.0 und höher) die normale "Punkt" -Syntax zum Lesen und Schreiben von Eigenschaften zu verwenden, deren Namen zur Kompilierungszeit bekannt sind (also variable.Member).

Dieses Beispiel geht davon aus, dass Sie eine Funktion GetPropertyValues() haben, die eine IEnumerable<KeyValuePair<string, object>> mit den Eigenschaften Namen und Werte zurückgibt:

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

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

HttpContext.Current.Session[Object1] = obj; 

Wenn Sie wissen, dass das Objekt eine ID Eigenschaft und eine Status Eigenschaft, zum Beispiel, Sie könnten es wie folgt verwenden:

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; 
Verwandte Themen