c#用非托管数据序列化类
本文关键字:序列化 托管数据 | 更新日期: 2023-09-27 18:15:55
我目前正在修改我的代码,以便我可以使用内置的。net二进制序列化器序列化它。然而,类的一个字段出现了一个问题——一个指向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;
};
有什么建议可以解决这个问题吗?
让您的类实现isserializable接口,并在您认为合适的时候手动处理序列化。不要忘记为反序列化添加适当的构造函数。
看一下序列化代理:当您不能或不想将序列化逻辑与类的业务逻辑(在您的例子中是SparceMatrix)混合使用时,它们为实现isserializable提供了一个很好的替代方案。