父类已实现ISerializable接口,子类没有添加可序列化特性

ddddouche 2015-08-26 09:06:41


在Java解惑上看到这样一个题目,想用序列化对Dog 的实例进行深拷贝。在不对Dog对象添加[ [Serializable] 特性时,使用Binary序列化时,出现异常。请问父类实现了ISerializable接口时,子类又没标准为可序列化的情况下,如何实现对象的拷贝???


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Text;

namespace DeSerializable
{
public class Dog : Exception
{
public readonly string Name = "David Lee";
public static Dog Instrance = new Dog();

private Dog()
{
}
public override string ToString()
{
return string.Format("{0}小狗汪汪叫!", Name);
}
}


class Program
{
static void Main(string[] args)
{
Dog dog = DeepCopyDog();
Dog originalDog = Dog.Instrance;
if (ReferenceEquals(dog,originalDog))
{
Console.WriteLine("深拷贝失败");
}
else
{
Console.WriteLine("拷贝成功,恭喜");
}
Console.ReadLine();
}
public static Dog DeepCopyDog()
{
Dog dog = Dog.Instrance;
using (MemoryStream ms = new MemoryStream())
{
BinaryFormatter bfFormatter = new BinaryFormatter();
bfFormatter.Serialize(ms, dog);
ms.Position = ms.Seek(0, SeekOrigin.Begin);
return bfFormatter.Deserialize(ms) as Dog;
}
}
}
}
...全文
462 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
本拉灯 2015-08-26
  • 打赏
  • 举报
回复
引用 2 楼 ddddouche 的回复:
嗯,我只想了解下是否有方法处理这个问题. 感觉每次都要对子类添加这个特性,略麻烦。
你要序列化子类,不管父类有没有[Serializable] ,序列的那个类必需要有[Serializable]
ddddouche 2015-08-26
  • 打赏
  • 举报
回复
嗯,我只想了解下是否有方法处理这个问题. 感觉每次都要对子类添加这个特性,略麻烦。
Poopaye 2015-08-26
  • 打赏
  • 举报
回复
BinaryFormatter的本质就是反射,所以java的题目套用到c#上来是没意义的

110,534

社区成员

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

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

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