curityPermissionAttribute(SecurityAction.Demand,SerializationFormatter=true)] public virtual void GetObjectData(SerializationInfo info, StreamingContext context) { // 完成序列化操作 } } 这种解决方法可以将结构的载入和存储,与结构的内部表现完全分离开来。虽然结构内部保存的只是数组引用,但用户并不需关心。但缺点是必须为每个结构都编写相应的序列化支持代码,编写和维护都比较麻烦。 与此思路类似的是我比较喜欢的一种解决方法,通过一个公共工具基类以 Reflection 的方式统一处理,如: 以下内容为程序代码: public class IMAGE_OPTIONAL_HEADER : BinaryBlock { public const int IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16; public ushort Magic; public uint NumberOfRvaAndSizes; public IMAGE_DATA_DIRECTORY[] DataDirectory = new IMAGE_DATA_DIRECTORY[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; } 注意原本的 struct 在这儿已经改为 class,因为通过这种方式已经没有必要非得固守值类型的内存模型。BinaryBlock 是一个页码:[1] [2] [3] [4] [5] [6] [7] [8] 第7页、共8页 |