formatter deserialize给出:在解析完成之前遇到的Stream of Stream

roy*_*oyu 6 c# binary exception formatter

我试图反序列化我保存到文件的对象(使用二进制格式化程序).无论我尝试什么,我都会得到异常:解析完成之前遇到的End of Stream

我有以下几行代码:

public static T DeserializeFromBinaryFile<T>(string fileName)
{
    T instance = default(T);
    FileStream fs = new FileStream(fileName, FileMode.Open);
    try
    {
        BinaryFormatter formatter = new BinaryFormatter();
        instance = (T)formatter.Deserialize(fs);
    }
    catch{}
    finally
    {
        fs.Close();
    }

    return instance;
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

public static T DeserializeFromBinaryFile<T>(string fileName)
{
    T instance = default(T);
    FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
    MemoryStream ms = new MemoryStream();
    try
    {
        byte[] bytes = new byte[fs.Length];
        fs.Read(bytes, 0, (int)fs.Length);
        ms.Write(bytes, 0, (int)fs.Length);
        ms.Position = 0;
        ms.Seek(0, SeekOrigin.Begin); 
    }
    catch { }

    try
    {
        BinaryFormatter formatter = new BinaryFormatter();
        instance = (T)formatter.Deserialize(ms);
    }
    catch { }
    finally
    {
        ms.Close();
        fs.Close();
    }

    return instance;
}
Run Code Online (Sandbox Code Playgroud)

但无论我做什么,总是得到例外:

解析完成之前遇到的流结束

附加:我刚做了一些额外的测试.如果我有一个简单的对象,只有几个属性,它可以正常工作.使用更多(大)复杂对象,封装其他对象,枚举等,这就是我得到异常的时候.

Ota*_*con 1

尝试在第二个 try/catch 块内为您的流设置positionto :0

BinaryFormatter b = new BinaryFormatter();
s.Position = 0;
return (YourObjectType)b.Deserialize(s);
Run Code Online (Sandbox Code Playgroud)