1

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

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 吗?

谢谢你。

4

2 回答 2

2

尝试 remove 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;
}
于 2011-07-27T22:35:41.957 回答
0

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

stream.Seek(0, SeekOrigin.Begin);

那句话:

stream.Position=0;
于 2014-01-21T17:32:07.973 回答