C# "在分析完成之前就遇到流結尾" 錯誤解決方法

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;
        }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章