【发布时间】:2014-10-24 23:58:59
【问题描述】:
我们有一个自定义 ConfigurationManager 库,可将 config.json 文件序列化/反序列化为 ExpandoObject。
是否可以创建一个覆盖这些属性的 Getter/Setter 的自定义属性来抽象此 ExpandoObject?
理想情况下,我可以像这样使用属性:
[System.AttributeUsage(System.AttributeTargets.Property)]
class Configureable : System.Attribute
{
public string Default { get; set; }
public bool IsEncrypted { get; set; }
}
class Test
{
[Configureable(Default = "0",IsEncrypted = false)]
public string MyValue { get; set; }
}
当我设置修饰属性的值时,我想自动更新 ExpandoObject 的值,这反过来又会强制将更新写入我的 config.json 文件。
当我访问修饰属性的值时,我希望 getter 实际返回底层 ExpandoObject 的值。我可以通过手动让开发人员修改 getter/setter 来做到这一点。我想知道我是否也可以使用属性内的代码来执行此操作。
谢谢!
【问题讨论】:
-
“抽象这个 ExpandoObject”是什么意思?您能否详细说明一下,一旦物业被装修,您会发生什么?
-
类型和属性不知道装饰它们的属性。属性被编译到程序集中,您必须使用反射来访问它们。 (反之亦然:属性不知道它们装饰的是什么类型或道具)。因此,属性本身覆盖任何东西的可能性不大。
-
@YuvalItzchakov - 我已经澄清了我的要求。
标签: c#