При использовании DynamicObject в качестве базового класса вы должны предоставить конкретные переопределения для TryGetMember и TrySetMember для отслеживания создаваемых вами динамических свойств (на основе документации MSDN DynamicObject ):
class DemoDynamicObject: DynamicObject
{
Dictionary<string, object> dictionary
= new Dictionary<string, object>();
public override bool TryGetMember(
GetMemberBinder binder, out object result)
{
string name = binder.Name;
return dictionary.TryGetValue(name, out result);
}
public override bool TrySetMember(
SetMemberBinder binder, object value)
{
dictionary[binder.Name] = value;
return true;
}
}
Если вы просто хотите иметь динамический объект, к которому можно добавить свойства, вы можете просто использовать экземпляр ExpandoObject и пропустить пользовательский класс, наследуемый от DynamicObject.