如何在c#中没有性能影响的情况下读取和设置私有字段?

时间:2012-06-28 11:45:02

标签: c# performance reflection

RavenDB可以序列化任何给定C#对象上的所有公共,私有和受保护属性,即使没有任何序列化属性也是如此。

我知道这可以通过反射来完成,但这会产生一些性能问题。还有其他更有效的方法来实现这一目标吗?

在.NET中使用内置序列化需要注释或实现一些序列化接口,而RavenDB可以将任何给定对象序列化为JSON。

我对它使用的技术更感兴趣,而不是特定的RavenDB。

2 个答案:

答案 0 :(得分:1)

如果通过反射设置属性太慢,则可以生成在运行时设置它们的动态方法。这可以使用Relection.Emit或通过创建编译Expression<T>来完成。

答案 1 :(得分:0)

向NHibernate寻求灵感 - 除了其他选择之外,它还为您提供了使用界面表达哪些属性的机会。在引擎盖下,实现接口的对象确实改变了处理。

例如参见NHibernate Reflection Optimizer - what does it do?