XML序列化后,反序列化时出现错误,
"XML 文档(779, 13)中有错误。"
查看了一下序列化的文件,在文件最后总是会多出一些垃圾字符导致反序列化错误,请问大侠这是怎么回事?序列化
using (FileStream fs = new FileStream(strFile, FileMode.OpenOrCreate))
{
XmlSerializer formatter = new XmlSerializer(typeof(ClassData));
formatter.Serialize(fs, MyVarValue);
fs.Close();
}
反序列化
using (FileStream fs = new FileStream(m_strDes, FileMode.Open))
{
XmlSerializer formatter = new XmlSerializer(typeof(ClassData));
MyVarValue = (ClassData)formatter.Deserialize(fs);
fs.Close();
}
"XML 文档(779, 13)中有错误。"
查看了一下序列化的文件,在文件最后总是会多出一些垃圾字符导致反序列化错误,请问大侠这是怎么回事?序列化
using (FileStream fs = new FileStream(strFile, FileMode.OpenOrCreate))
{
XmlSerializer formatter = new XmlSerializer(typeof(ClassData));
formatter.Serialize(fs, MyVarValue);
fs.Close();
}
反序列化
using (FileStream fs = new FileStream(m_strDes, FileMode.Open))
{
XmlSerializer formatter = new XmlSerializer(typeof(ClassData));
MyVarValue = (ClassData)formatter.Deserialize(fs);
fs.Close();
}
在xml文件的最后</ClassData>出还有出现这个类的一下字母
例如
</ClassData>>
</ClassData>ata>
导致反序列化时出现这个位置有错误,我的程序哪里错了?
public class ClassData
{
//分析界面变量
public bool bIsMousePot = true; //鼠标点击
public bool bIsZoom = false; //放大
public bool bIsAdjust = false; //是否被选中 public const int nMkrNum = 6; //er点的个数
public const int nLimNum = 2; //开始合格线的点数
public int nDivNum = 10; //纵轴显示的格数
public double dTopLev = 0; //最top的线
public double dBottomLev = 100; //最Bottom的线 public double dStartFreq = 25; //开始的频率点值
public double dStopFreq = 75; //终止的频率点值
public string strStartFreqUnit = "MHz"; //开始频率点的单位
public string strStopFreqUnit = "MHz"; //终止频率点的单位
public List<ClassMarker> lstMkrInfo = new List<ClassMarker>();
public List<ClassMarker> lstMkrCompInfo = new List<ClassMarker>(); public List<ClassLimiteLine> lstMaxLim = new List<ClassLimiteLine>();
public List<ClassLimiteLine> lstMinLim = new List<ClassLimiteLine>(); //删除
public double[] nRdNum = new double[517]; public ClassData()
{
}
}大概就是这样,除了一些常用变量也就是几个List<>了,但有时转换就没有问题,有时就会出现多处字符在反序列化时出错。
/// <summary>
/// 序列化
/// </summary>
/// <param name="o"></param>
/// <param name="fileName"></param>
/// <returns></returns>
public static void SerializeObject(object o, string fileName)
{
string file = Directory.GetCurrentDirectory() + "\\" + fileName;
try
{
//删除临时文件
if (File.Exists(file))
File.Delete(file);
//序列化到文件
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, o);
stream.Close();
stream = null; }
catch (Exception ex)
{
Log.WriteTextLog("admin", LogType.ErrorLog, "序列化数据", ex.Message);
}
}
#endregion
#region 反序列化
/// <summary>
/// 反序列化
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public static object DeserializeObject(string fileName)
{
object result = null;
string file = Directory.GetCurrentDirectory() + "\\" + fileName;
try
{
//反序列化
Stream stream = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.None);
IFormatter formatter = new BinaryFormatter();
result = formatter.Deserialize(stream);
stream.Close();
stream = null;
}
catch (Exception ex)
{
Log.WriteTextLog("admin", LogType.ErrorLog, "反序列化数据", ex.Message);
}
return result;
}
#endregion
没有实现 iSerial接口的要在序列化时自己写。dotnet中有很多例子。找一个就可以解决你的问题
{
XmlSerializer formatter = new XmlSerializer(typeof(ClassData));
fs.Seek(0, SeekOrigin.Begin);
MyVarValue = (ClassData)formatter.Deserialize(fs);
fs.Close();
}
字段标示为可序列化了,什么类型是没有实现iSerial接口?List<>么?xml序列化可以序列它的,soap不可以。没有看明白你的意思,能说详细点么?
文件格式怎么不对?用xml序列化是必须要保存为.xml文件么?