反序列化部分代码有什么问题

时间:2012-06-05 20:44:41

标签: c#

public static string Serialize<T>(IEnumerable<T> list)
{
    BinaryFormatter formatter = new BinaryFormatter();

    using (MemoryStream m = new MemoryStream())
    {
        formatter.Serialize(m, list);
        m.Position = 0;
        return Convert.ToBase64String(m.ToArray());
    } 

}

public static T Deserialize<T>(string listData)
{
    BinaryFormatter formatter = new BinaryFormatter();

    using (MemoryStream m = new MemoryStream())
    {
        return (IEnumerable<T>)formatter.Deserialize(m); //Problem is here
    }
}

错误1无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'T'。存在显式转换(您是否错过了演员?)\

请告知。

2 个答案:

答案 0 :(得分:3)

正如消息中明确指出的那样,您无法从声明为返回IEnumerable<T>的方法返回T

答案 1 :(得分:1)

将返回类型从T更改为IEnumerable<T>。您还需要使用字符串填充内存流,例如:

public static IEnumerable<T> Deserialize<T>(string listData)
{
    BinaryFormatter formatter = new BinaryFormatter();

    using (MemoryStream m = new MemoryStream(Convert.FromBase64String(listData)))
    {
        return (IEnumerable<T>)formatter.Deserialize(m);
    }
}