Похоже, вы искали класс 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;