首页 / 知识
.NET序列化类设计问题
2023-04-14 22:43:00

.NET serialization class design issue我们有一个相当大的对象图,需要以许多不同的方式(模式)对其进行序列化和反序列化。在某些模式下,我们希望对某些属性进行反序列化,而在某些模式下,则不希望对它们进行反序列化。在将来的模式中,属性的选项可能比是或否更多。现在的问题是我们如何实现这些模式。 方法A(使用反序列化构造函数和ISerializable.GetObjectData): 如果我们使用反序列化构造函数让图的每个对象自己进行序列化,那么对于所有不同的反序列化模式,我们都会得到很多切换。但是,这种方法的优点是所有反序列化逻辑都在一个位置,并且如果我们添加新属性,我们只需要修改ISerializable.GetObjectData和反序列化构造函数即可。另一个优点是对象可以考虑可能公开公开的内部状态。最重要的缺点是我们数据对象本身需要了解所有可能的序列化模式。如果需要新模式,则需要修改数据对象。 方法B(反序列化工厂类/方法): 另一种方法是为每个在外部进行序列化和反序列化的模式(例如GraphSerializer.SerializeObjectTypeX(ObjectTypeX objectToSerialze))的每种模式都具有某种反序列化工厂类/方法。这里的优点是,只要我们想要一个新模式,我们就只需添加一个新模式即可。 Factory Class / Method和我们的Dataobject不会被所有引入的序列化模式所困扰,主要的缺点是我必须为所有不同的模式一遍又一遍地编写相同的序列化代码。一个或两个属性,但是我将不得不再次为整个图形实现完整的逻辑,当我向数据对象添加新属性时,我需要更新所有工厂类。 所以我想知道是否有更好的方法来解决恕我直言的一般问题。甚至是.NET的最佳实践?还是我只是从错误的角度看待整件事?
为每种模式制作单独的序列化程序类(a-la XmlSerializer),继承或封装以避免重复。 |
最新内容
相关内容
linux命令行模式清页?
linux命令行模式清页?,工作,系统,命令,信息,地址,目录,内容,文件,操作,功能,linux常用命令linux系统常用操作命令如下:ls:全拼list,功能是列出目linux进入命令行模式?
linux进入命令行模式?,系统,地址,情况,工作,命令,终端,首页,信息,目录,界面,linux怎么进入字符命令界面??1、打开linux系统,在linux的桌面的空linux底线模式命令?
linux底线模式命令?,系统,档案,密码,状态,工作,命令,模式,文件,明文,界面,linux修改后回到底端命令1、先按ESC进入Command模式,然后输入“:wq”,linux启用命令模式?
linux启用命令模式?,系统,密码,数字,首页,电脑,情况,终端,界面,模式,命令,安装了linux,但进入时候直接进入了桌面,请问怎么进入命令模式,学习llinux命令行模式联网?
linux命令行模式联网?,系统,网络,地址,密码,软件,检测,信息,工具,终端,界面,linux下命令行如何配置蓝牙拨号上网(linux高手进)1、更改配置文件linux回到命令行模式?
linux回到命令行模式?,系统,密码,状态,工具,电脑,终端,界面,环境,地方,命令,切换Linux系统下图形界面与Linux命令行模式1、手工切换:在图形界面linux命令模式联网?
linux命令模式联网?,网络,系统,工具,软件,密码,地址,最新,信息,工作,数据,linux下配置网络连接1、Linux 系统中,可以通过以下几种方法配置网络:linux进去命令模式?
linux进去命令模式?,系统,密码,首页,终端,命令,界面,窗口,选项,桌面,用户,linux进入管理员模式命令在Linux的命令提示窗口下。输入su命令,然后linux命令模式全屏?
linux命令模式全屏?,系统,工具,电脑,数据,位置,命令,虚拟机,分辨率,字符串,窗口,linux命令行模式满屏如何翻页或dmesg |less more命令的翻页按linux中回到命令模式?
linux中回到命令模式?,系统,密码,情况,状态,终端,环境,信息,首页,界面,命令,“linux”怎么返回输入命令的状态?1、如果在命令行下使用gedit, 关linux命令行模式6?
linux命令行模式6?,系统,设计,信息,工作,终端,首页,庞大,服务,地方,环境,linux的运行模式1、Disable工作模式(关闭模式)在Disable模式中,SELinulinux怎么用命令模式?
linux怎么用命令模式?,工作,地址,系统,信息,管理,命令,目录,情况,图形界面,终端,linux系统常用操作命令1、linux常用命令有pwd命令、cd命令、l