二进制流'128'不包含有效的BinaryHeader

时间:2011-09-07 06:54:22

标签: .net visual-c++

我有一个非常典型的'二进制流'#'不包含有效的BinaryHeader'问题,但经过大量搜索后看不到它的原因。我已将问题归结为绝对基础知识,但仍然出现错误。

这是我的班级我正在序列化:

[序列化] ref class ExportRequestData { 公共:

property int ThisRecordingId;
property DateTime ^ThisRecordingStartTime;
property array<DateTime> ^FromTimes;
property array<TimeSpan> ^Durations;
property String ^CameraAFilename;
property String ^CameraBFilename;
property String ^CameraCFilename;
property String ^CameraDFilename;
property String ^SubtitleTags;
property String ^SaveAsFilename;

ExportRequestData(int ThisRecordingId, DateTime ^ThisRecordingStartTime, array<DateTime> ^FromTimes, array<TimeSpan> ^Durations,
                    String ^CameraAFilename, String ^CameraBFilename, String ^CameraCFilename, String ^CameraDFilename,
                    String ^SubtitleTags, String ^SaveAsFilename);

};

这是我的代码被剥离以进行绝对基本测试:

    try
{

    ExportRequestData ^ExportRequestData1 = gcnew ExportRequestData(ThisRecordingId, ThisRecordingStartTime, FromTimes, Durations, 
                                CameraAFilename,  CameraBFilename, CameraCFilename, CameraDFilename,
                                SubtitleTags, SaveAsFilename);

    MemoryStream ^MemoryStream1 = gcnew MemoryStream();
    BinaryFormatter ^BinaryFormatter1 = gcnew BinaryFormatter();
    BinaryFormatter1->Serialize(MemoryStream1, ExportRequestData1);
    MemoryStream1->Flush();
    MemoryStream1->Position = 0;
    MemoryStream1->Seek(0, SeekOrigin::Begin);

    ExportRequestData ^ExportRequestData2;
    ExportRequestData2 = (ExportRequestData^)BinaryFormatter1->Deserialize(MemoryStream1);  //<<<< THIS CAUSES ERROR
    MemoryStream1->Close();
}
catch (Exception ^e)
{
    MessageBox::Show(e->ToString(), L"Error", MessageBoxButtons::OK, MessageBoxIcon::Error);
}

这是产生的错误: “二进制流'128'不包含有效的BinaryHeader。可能的原因是序列化和反序列化之间无效的流或对象版本更改。”

所以我在回到它的开头后反序列化我刚刚序列化的同一个记忆流,从而在反序列化之前删除了流被破坏的任何可能性。 MemoryStream1的内容看起来很好(从0x00,0x01,0x00,0x00,0x00,0xFF ......开始,以...... 0x00,0x00,0x00,0x00,0x0B结束,这与我见过的几个例子相符。我注意到的是,在流中,字段名称前面带有“&lt; backing_store&gt;”但是我找不到任何可以解释为什么那么糟糕的东西。我得出的结论是,DateTime或TimeSpan可以'是序列化的,但我找不到任何可以说是这样的情况,这不是正在产生的错误信息。如果有人能够对此有所了解,我将非常感激,因为我的头受到了所有的伤害撞。

由于 亚当

1 个答案:

答案 0 :(得分:-1)

嗯,你让我失去了stackoverflowers,但我到了底部。问题是类中的DateTime ^对象。如果我使用DateTime而不是它有效,但它似乎是一个更合理的解决方案,实际转换为字符串,并避免任何潜在的本地时间问题。我在这里发布了http://www.electronic-designer.co.uk/programming/visual-cpp-cli-dot-net/serialization/serialization-of-a-class