如何访问 .NET 4 中的对象二进制文件?

发布于 2024-10-15 00:46:13 字数 81 浏览 3 评论 0原文

我需要读取对象二进制数据(包括私有字段)以以特定方式处理和序列化它们。

我怎样才能在 C# 中做到这一点,我需要 MSIL 编码吗?

I need to read objects binary data (including private fields) to process and serialize them in a specific way.

How can I do this in C#, do I need MSIL coding?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

淤浪 2024-10-22 00:46:13

您可以使用反射和(可选)动态 IL 生成来完成此操作。

例如,一旦您知道类型(即有一个 System.Type 实例),您就可以枚举所有字段(type.GetFields() 返回一个 列表FieldInfo 对象),然后使用 GetValue 方法获取字段值。只要通过了安全信任级别检查,这就适用于私有字段。

这不是很快,因此您可能需要预编译字段访问代码(仅在探查器告诉您之后才执行此操作!)。在这种情况下,您可以使用 System.Reflection.Emit 和 DynamicMethod 工具。 (您可以在 Google 和 MSDN 上找到教程;我发现编译一些函数很有帮助,这些函数执行我必须使用 C#/F# 执行的操作,然后检查 Reflector/ildasm 中的 MSIL 输出)。

You can do it using reflection and (optionally) dynamic IL generation.

For example, once you know the type (i.e. have a System.Type instance), you can enumerate all fields (type.GetFields() returns a list of FieldInfo objects), and then use GetValue method to get field value. This works with private fields, as long as the security trust level checks are passed.

This is not very fast, so you may want to precompile the field access code (only do that after the profiler tells you!). In this case, you can use System.Reflection.Emit and DynamicMethod facilities. (you can find the tutorials on Google and on MSDN; I found it helpful to compile some functions that do what I have to do with C#/F# and then inspect the MSIL output in Reflector/ildasm).

趴在窗边数星星i 2024-10-22 00:46:13

实际上这很容易。如果您只想读取二进制数据(不是序列化对象,而是原始二进制数据),可以使用BinaryReader

Actually it's quite easy. If you just want to read binary data (not serialized objects, but raw binary data), you can use BinaryReader.

胡大本事 2024-10-22 00:46:13

首先实现 ISerialized。该界面允许您手动控制序列化: http:// msdn.microsoft.com/en-us/library/system.runtime.serialization.serializes.aspx

Start by implementing ISerializable. That interface allows you to control serialization manually: http://msdn.microsoft.com/en-us/library/system.runtime.serialization.iserializable.aspx

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文