二进制序列化的问题

dubuyunjie 2015-09-23 05:54:16
各位大神好,我有这样一个问题。
这是我要序列化的数据结构,每次序列化一个CDetails 。里面含有一个list
[Serializable]
public class CDetail
{
public double Amout
{
get { return _amout; }
set { _amout = value; }
}

public string Type
{
get { return _type; }
set { _type = value; }
}

public string OtherType
{
get { return _otherType; }
set { _otherType = value; }
}

public string Remark
{
get { return _remark; }
set { _remark = value; }
}


private double _amout;
private string _type;
private string _otherType;
private string _remark;
}

[Serializable]
public class CDetails
{
/// <summary>
/// 1为CEO,2为董事长
/// </summary>
[DefaultValue(1)]
public int CEOOrChairMan;

private List<CDetail> _listDetail = new List<CDetail>();
public List<CDetail> listDetail
{
get { return _listDetail; }
set { _listDetail = value; }
}

public void Add(CDetail c)
{
listDetail.Add(c);
}
}


序列化和反序列化的代码如下
/// <summary>
/// 序列化 对象到字符串
/// </summary>
/// <param name="obj">泛型对象</param>
/// <returns>序列化后的字符串</returns>
public static string Serialize<T>(T obj)
{
try
{
BinaryFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
formatter.Serialize(stream, obj);
stream.Position = 0;
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
stream.Flush();
stream.Close();
return System.Convert.ToBase64String(buffer);
}
catch (Exception ex)
{
throw new Exception("序列化失败,原因:" + ex.Message);
}
}

/// <summary>
/// 反序列化 字符串到对象
/// </summary>
/// <param name="obj">泛型对象</param>
/// <param name="str">要转换为对象的字符串</param>
/// <returns>反序列化出来的对象</returns>
public static T Desrialize<T>(T obj, string str)
{
try
{
//obj = default(T);
BinaryFormatter formatter = new BinaryFormatter();
//formatter.Binder = new BindChanger();
byte[] buffer =System.Convert.FromBase64String(str);
MemoryStream stream = new MemoryStream();
stream.Write(buffer,0,buffer.Length);
stream.Position = 0;
obj = (T)formatter.Deserialize(stream);
stream.Flush();
stream.Close();
}
catch (Exception ex)
{
throw new Exception("反序列化失败,原因:" + ex.Message);
}
return obj;
}


之前一个版本用着好好的,可以序列化可以显示。
但是不知道怎么的,我这最新的代码,我看了svn,没有改动,最新的程序不能反序列化以前的数据,体现在反序列化之后那个list为null。如果把这个程序集换成以前的,就可以。我现在在反序列化的时候加了
formatter.AssemblyFormat = FormatterAssemblyStyle.Simple;
这个,也不行。其它我实在想不到什么原因了。请各位赐教~
...全文
192 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
看你的头像很可爱所以才回的。 你们这个公司有技术经理吗?要注意啊。出了这种事儿!
  • 打赏
  • 举报
回复
本来就是这样的!二进制序列化不具有版本兼容性,你怎么这个都不知道呢? json、xml 之类的才是兼容性比较好的序列化方法。甚至多、少一些字段,更别说dll版本不一样的,都没有问题,可以兼容。 谁让你二进制序列化呢?
tcmakebest 2015-09-23
  • 打赏
  • 举报
回复
二进制序列化其实不如XML序列化,有结果必然有原因,楼主多用心吧.
Poopaye 2015-09-23
  • 打赏
  • 举报
回复
你都有svn了,一个个版本比啊

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧