[英]C# code expansion/injection in compile time
我正在寻找一种在编译时扩展/注入代码的方法,例如模板/宏/代码段...
假设我在应用程序的很多地方都编写了以下代码:
[JsonObject("MyProperty")]
private string MyPropertyJson { get; set; }
public object MyProperty { get; set; }
MyPropertyJson属性仅用于EF映射,因此我将值保存为DB中的JSON字符串,但对于类用户,他们仅了解MyProperty属性。
我想做的是在编译时将MyPropertyJson扩展为:
private string MyPropertyJson
{
get
{
return JsonConvert.SerializeObject(MyProperty);
}
set
{
MyProperty = JsonConvert.DeserializeObject(value);
}
}
我希望仅在输出二进制文件中完成此操作而不影响源代码。
我了解Unity,PostSharp,Aspect-Injector等。但是它们无法实现我想要的功能,因为通过使用它们,我必须使用一些反射来查找和操作MyProperty,但我想像编写它一样完全扩展它在同一个班级中,可以访问所有班级内部信息。
就像代码片段一样,但是要在编译阶段进行扩展。
通过编写BeforeBuild msbuild目标来调用我开发来的外部控制台应用程序,我能够达到我的要求:
它就像一个魅力:)
我正在为此任务使用通用引擎,完成后将其提交到github。
这是一种获得所需内容的方法。
使用隐式运算符
例如,需要创建自己的json对象类,然后添加以下内容:
class JsonObject {
public object obj;
public static implicit operator string(JsonObject target) {
return Json.SerializeObject(target.obj);
}
}
但这并不能真正做到您真正想要的。 几乎与创建新类和添加函数相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.