我目前正在修改我的代码,所以我可以使用内置的.NET Binary序列化程序对其进行序列化。但是,其中一个类的字段出现问题 - 指向struct的指针,该指针位于非托管内存中(通过p / invoke创建)。似乎.NET只是在序列化时记住指针值,而不是值,当我反序列化类时,Matrix属性总是随机数据。您可以在下面找到我的代码示例:
[Serializable]
public unsafe class FrequencyMatrixBuilder
{
public SparseMatrix* Matrix { get; private set; }
....
}
[Serializable]
[StructLayout(LayoutKind.Sequential)]
public unsafe struct SparseMatrix
{
public int rows;
public int cols;
public int vals;
public int* pointr;
public int* rowind;
public double* value;
};
有任何建议我该如何解决这个问题? 提前谢谢。
答案 0 :(得分:3)
让您的类实现ISerializable接口并根据需要手动处理序列化。 并且不要忘记为反序列化添加适当的构造函数。
答案 1 :(得分:1)
看看serialization surrogates:当你不能或不想将序列化逻辑与类的业务逻辑(在你的情况下,SparceMatrix)混合时,它们提供了实现ISerializable的一个很好的替代方案。