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

时间:2011-07-27 22:07:38

标签: serialization c#-4.0 generics binaryformatter

任何人都可以帮助这种方法吗?我有一个将文件反序列化为类型的通用方法。

public static T DeserializeFromFile<T>(string fileName) where T : class
{
    if (!File.Exists(fileName))
        return null;

    try
    {
        using (FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
        {
            BinaryFormatter formatter = new BinaryFormatter();
            stream.Seek(0, SeekOrigin.Begin);

            return (T)formatter.Deserialize(stream);
        }
    }
    catch (Exception ex)
    {
        return null;
    }
}

知道为什么我会收到这个SerializationException吗?

谢谢。

2 个答案:

答案 0 :(得分:2)

尝试删除stream.Seek(0, SeekOrigin.Begin);,但无论如何,您如何序列化数据,也许还存在问题?一个合适的方法如下:

public static bool TrySerializeToFile<T>(string fileName, T data) where T : class
{
    bool operationSucceed = false;
    try
    {
        using (FileStream stream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write))
        {
            BinaryFormatter formatter = new BinaryFormatter();

            formatter.Serialize(stream, data);

            operationSucceed = true;
        }
    }
    catch
    { }

    return operationSucceed;
}

答案 1 :(得分:0)

您是否尝试过使用Stream.Position属性?换句话说,而不是这句话:

stream.Seek(0, SeekOrigin.Begin);

该声明:

stream.Position=0;