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

时间:2011-11-28 23:04:08

标签: c# serialization

我目前正在修改我的代码,所以我可以使用内置的.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;
};

有任何建议我该如何解决这个问题? 提前谢谢。

2 个答案:

答案 0 :(得分:3)

让您的类实现ISerializable接口并根据需要手动处理序列化。 并且不要忘记为反序列化添加适当的构造函数。

答案 1 :(得分:1)

看看serialization surrogates:当你不能或不想将序列化逻辑与类的业务逻辑(在你的情况下,SparceMatrix)混合时,它们提供了实现ISerializable的一个很好的替代方案。