如何在c#中读取和设置私有字段而不影响性能?

如何在c#中读取和设置私有字段而不影响性能?,c#,performance,reflection,C#,Performance,Reflection,RavenDB可以序列化任何给定C#对象上的所有公共、私有和受保护属性,即使没有任何序列化属性 我知道这可以通过反射来实现,但这会带来一些性能问题。有没有其他更有效的方法来实现这一点 在.NET中使用内置序列化需要注释或实现一些序列化接口,而RavenDB可以将任何给定对象序列化到JSON或从JSON序列化 我更感兴趣的是它使用的技术,而不是具体的RavenDB 如果通过反射设置属性太慢,您可以生成在运行时设置属性的动态方法。这可以通过使用Relection.Emit或通过创建一个表达式来实现,

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

我知道这可以通过反射来实现,但这会带来一些性能问题。有没有其他更有效的方法来实现这一点

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


我更感兴趣的是它使用的技术,而不是具体的RavenDB

如果通过反射设置属性太慢,您可以生成在运行时设置属性的动态方法。这可以通过使用
Relection.Emit
或通过创建一个
表达式来实现,这可以从NHibernate中获得灵感-除了其他选择之外,它还可以让您使用接口来表达要保留哪些属性。在引擎盖下,实现接口的包装器对象确实会改变处理方式


例如,请参见“不要”。别这样。他们是私人的是有原因的。你想要达到的目标是什么?这些变量是私有的是有原因的;你为什么要破坏这个设计?我对如何做到这一点很感兴趣,想了解RavenDB和其他解决方案是如何工作的。RavenDB没有什么神奇之处——它利用了平台的内置序列化功能(已经处理序列化公共、私有和受保护的属性,除非另有指示).@Oded那么这些对象不需要用[Serializable]注释吗?