C#在反序列化過程中
在分析完成之前就遇到流結尾(End of Stream encountered before parsing was completed?)
解決思路:
1、檢查要序列化的對象,類是否標記 [Serializable] ;
2、添加 stream.Seek(0, SeekOrigin.Begin);方法來源如下圖:
附:序列化及反序列化函數:
/// <summary>
/// 序列化對象
/// </summary>
/// <param name="myObject"></param>
internal static bool SerializeFile(object myObject, string filePath, out string errMsg)
{
bool thisResult = true;
try
{
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, myObject);
stream.Close();
thisResult = true;
errMsg = "";
}
catch (Exception ex)
{
thisResult = false;
errMsg = ex.Message;
}
return thisResult;
}
/// <summary>
/// 反序列化對象
/// </summary>
/// <param name="filePath"></param>
/// <param name="obj"></param>
/// <param name="errMsg"></param>
/// <returns></returns>
internal static bool AntiSerializeFile(string filePath, out object obj, out string errMsg)
{
bool thisResult = true;
try
{
if (!File.Exists(filePath))
{
errMsg = "文件不存在";
thisResult = false;
obj = null;
}
else
{
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.None);
stream.Seek(0, SeekOrigin.Begin);
object myObj = formatter.Deserialize(stream);
stream.Close();
obj = myObj;
errMsg = "";
}
}
catch (Exception ex)
{
thisResult = false;
obj = null;
errMsg = ex.Message;
}
return thisResult;
}