反序列化后,子类对象自动转成父类,并且无法恢复成子类,数据丢失,求解

nada123456789 2013-10-29 07:04:55

[Serializable]
public class jProcess
{
public string Name { get; set; }
public List<jBaseNode> ProcessNodes { get; set; }
public jProcess()
{
ProcessNodes = new List<jBaseNode>();
}

public string GenerateProgress(string currentTaskName)
{
jTask firstTask = ProcessNodes.Where(p => p is jTask).FirstOrDefault() as jTask;
StringBuilder sb = new StringBuilder ();
sb.Append("<span class='blue'>");
Build(currentTaskName,firstTask,sb);
return sb.ToString().TrimEnd('-','-','>');


}

private void Build(string currentTaskName,jTask task,StringBuilder sb)
{
sb.Append(task.AssigneeName+task.Remark);
if(task.Name==currentTaskName)
{
sb.Append("</span>");
}
sb.Append("-->");
jTask nextTask = task.TransitionList.Where(t=>t.Selected).FirstOrDefault().TargetNode as jTask;
if(nextTask==null)
{
return;
}
else
{
Build(currentTaskName,nextTask,sb);
}
}
}

这是我序列化的对象类,他包含一个List<jBaseNode> ProcessNodes集合,其中jBaseNode是基类,我有很多个子类继承自他,问题是序列化之后,得到的字符串里面是包含子类数据的,但是反序列化以后,生成的List<jBaseNode> ProcessNodes集合,里边的所有对象都是jBaseNode的类型了,无法再转成对应的子类,并且数据都丢失了,求解,谢谢!
...全文
625 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
nada123456789 2013-11-02
  • 打赏
  • 举报
回复
忘了说了,最后还是解决了,序列化成json格式确实不能用于多态,换成XmlSerializer就解决了,虽然数据量大了很多,但是类型信息全部保留了。
nada123456789 2013-10-30
  • 打赏
  • 举报
回复
引用 1 楼 hdhai9451 的回复:
系列化和反系列化是类对象转换成XML,以及XML转换成类,看你的代码好象是你想自己生成的.
这个类只是我要序列化的类,里面的代码不用看,关键是里边的这个List<jBaseNode> ProcessNodes集合。 我序列化的时候用的是JavaScriptSerializer,序列化存成一个字符串,然后再通过JavaScriptSerializer反序列化的时候,子类的数据就丢了,只保留了父类字段的数据。不知道是不是JavaScriptSerializer无法保留类型信息,我在尝试用XmlSerializer,好像还是有问题。。。
Andy__Huang 2013-10-29
  • 打赏
  • 举报
回复
对象系列化与反系列化 . http://blog.csdn.net/hdhai9451/article/details/12129579
Andy__Huang 2013-10-29
  • 打赏
  • 举报
回复
系列化和反系列化是类对象转换成XML,以及XML转换成类,看你的代码好象是你想自己生成的.

110,566

社区成员

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

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

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