如何访问 .NET 4 中的对象二进制文件?
我需要读取对象二进制数据(包括私有字段)以以特定方式处理和序列化它们。
我怎样才能在 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以使用反射和(可选)动态 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 ofFieldInfo
objects), and then useGetValue
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
andDynamicMethod
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).实际上这很容易。如果您只想读取二进制数据(不是序列化对象,而是原始二进制数据),可以使用
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
.首先实现 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