gpt4 book ai didi

c# - DataContractSerializer 如何写入私有(private)字段?

转载 作者:数据小太阳 更新时间:2023-10-29 01:50:05 24 4
gpt4 key购买 nike

我了解 XMLSerializer 如何通过使用反射来确定应该使用哪些公共(public)读/写字段或属性来序列化或反序列化 XML。然而 XMLSerializer 要求字段是公共(public)的和可读/写的。

但是,DataContractSerializer 能够读取或写入类中完全私有(private)的字段。所以我想知道如果不显式授予 DataContractSerializer 对我的类的额外访问权限,这怎么可能。

最佳答案

反射有很多特点。 XmlSerializer 通过“sgen.exe”能够将序列化代码预构建为二进制文件 (dll)。这在某些不允许动态代码但 dll(就像您的代码)仅限于可访问的 API 的场景中很有用。

但是...反射并没有这个限制,只要有足够的访问权限,您几乎可以做任何事情。为了提高性能,您可能不希望直接 经常使用反射,但是如果您有足够的权限直接在内存中创建 IL (DynamicMethod),那么您可以告诉它(在每个动态方法的基础上)与代码关联的 Type 。例如,如果我创建一个 DynamicMethodtypeof(Foo) 作为 owner 参数传递,那么该动态方法可以完全访问所有成员( Foo 上的字段)。有关信息,Delegate.CreateDelegate 提供对其他 protected 数据的类似访问。由于 DataContractSerializer 不担心预生成,它可以使用此访问权限。

关于c# - DataContractSerializer 如何写入私有(private)字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2572506/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com