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;
};

有什么建议可以解决这个问题吗?

c#用非托管数据序列化类

让您的类实现isserializable接口,并在您认为合适的时候手动处理序列化。不要忘记为反序列化添加适当的构造函数。

看一下序列化代理:当您不能或不想将序列化逻辑与类的业务逻辑(在您的例子中是SparceMatrix)混合使用时,它们为实现isserializable提供了一个很好的替代方案。