C# 上载二进制序列化文件时出现问题

C# 上载二进制序列化文件时出现问题,c#,serialization,encoding,ftp,C#,Serialization,Encoding,Ftp,我的程序的想法是允许用户将数据保存在云中。数据存储在二进制序列化文件中 序列化代码如下所示: FileStream Stream = new FileStream(..., FileMode.Create); // create stream BinaryFormatter Formatter = new BinaryFormatter(); // create formatter Formatter.Serialize(Stream, ObjectToSerialize); // serial

我的程序的想法是允许用户将数据保存在云中。数据存储在二进制序列化文件中

序列化代码如下所示:

FileStream Stream = new FileStream(..., FileMode.Create); // create stream
BinaryFormatter Formatter = new BinaryFormatter(); // create formatter
Formatter.Serialize(Stream, ObjectToSerialize); // serialize
Stream.Close();
问题是,当我上载序列化文件时,使用以下代码:

FtpWebRequest Request = (FtpWebRequest)WebRequest.Create(new Uri(...));
Request.Method = WebRequestMethods.Ftp.UploadFile;

Request.Credentials = new NetworkCredential(..., ...);
string Path = System.IO.Path.GetDirectoryName(...;
StreamReader SourceStream = new StreamReader(Path);
Request.UseBinary = true;
byte[] FileContents = Encoding.Default.GetBytes(SourceStream.ReadToEnd());
SourceStream.Close();
Request.ContentLength = FileContents.Length;

Stream RequestStream = Request.GetRequestStream();
RequestStream.Write(FileContents, 0, FileContents.Length);
RequestStream.Close();

FtpWebResponse Response = (FtpWebResponse)Request.GetResponse();

Response.Close(); 
文件编码发生了变化(我对此不确定..如果编码是问题,但我认为是),并且我无法再对文件进行反序列化,则会发生异常。你知道如何不损坏文件吗


致以最良好的祝愿

编码只适用于文本,这里处理的是二进制文件。您不应尝试将其作为字符串读取。“编码已更改”,因为您正在使用
编码。默认值取决于操作系统的当前配置

只需将代码更改为:

string Path = System.IO.Path.GetDirectoryName(...);
// StreamReader SourceStream = new StreamReader(Path);
// Request.UseBinary = true;
byte[] FileContents = File.ReadAllBytes(Path);
// SourceStream.Close();

如果要读取内存中的整个二进制文件。

我们需要更多详细信息。显示例外情况。这与您的问题是正交的,但您确实不想为此使用BinaryFormatter。一旦你升级了客户端,你就会有很多问题。您应该研究其他类型的序列化格式,如XML或Json。BinaryFormatter是指系统不同模块之间的传输格式,而不是系统某个部分升级后仍能保存的存储格式。若要继续Lasse所说的内容,…或使用与程序集版本无关的二进制格式,如proto-buf.net