我有一个ASP.NET MVC应用程序(我也使用jQuery)。
我允许用户使用HttpPostedFileBase类上传文件。
然后,我使用类型为InputStreamStream属性将文件流保存到我拥有的某个数据库中,首先在该数据库中序列化对象。 Stream是可序列化的,因此这里没有问题。

当用户不上传文件时,问题就开始了,在这种情况下,我希望使用我在某处拥有的另一个默认文件。
在这种情况下,一切都必须与第一种情况相似,因此最终我的数据库中将有一个Stream。因此,我必须实例化一个Stream并将其存储。 Stream是抽象的,所以我不能实例化Stream。相反,我使用了FileStream,它继承了Stream。问题是FileStream不能序列化,所以这里有一个问题。

我该如何解决?我是否可以使用另一个流,该流继承Stream并且可序列化?

最佳答案

不要序列化流以进行存储;流是“软管”,而不是“桶”。相反,请读取流并存储二进制数据(大多数数据库将具有二进制数据的数据类型,例如varbinary(max))。如果这是对象模型的一部分,我倾向于具有byte[]属性(具有有意义的名称);这将作为模型的一部分进行简单的序列化。只需读取流以创建byte[];任务完成。例如:

public static byte[] ReadToEnd(this Stream s) {
    using(var ms = new MemoryStream()) {
        s.CopyTo(ms);
        return ms.ToArray();
    }
}

关于c# - 继承类Stream并可以序列化C#的Stream,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7358923/

10-11 22:16
查看更多