是否可以使用任何标准序列化程序反序列化对象属性,而无需创建新对象?
问题是,有问题的对象非常复杂(它们只能由特殊工厂创建,它们的类型是在运行时动态生成的),但是它们有一些已知属性,我想将它们存储在外部文件中(最好是xml) ,但二进制也没问题),以后(可能在应用程序重启后),我希望将存储的属性设置回我提供的对象.
似乎所有标准序列化程序只能为我生成一个新对象(这也需要一个公共无参数构造函数),我必须从中手动分配所有属性.这与我希望避免的手动序列化没有太大区别,因为一组序列化属性非常大,并且在项目生命周期中可能会改变几次.在这一点上,我非常接近编写自己的轻量级序列化器,但也许有人可以提出更标准的方法来做这些事情?
protobuf-net有一个Serializer.Merge方法可以让您反序列化到现有实例中。仅写入流中找到的值(不会擦除对象)。
不是微软,但相当稳定。
对此进行扩展;获得处理所有常见场景的强大序列化是(我从痛苦的经验中知道)大量工作。我的建议肯定是尽可能重用现有代码。protobuf-net 似乎提供了你需要的一切;当前的二进制文件只需要您装饰您的类([DataContract]与 WCF 非常相似 - 事实上它甚至支持[DataContract]/ [DataMember]),但工作已经到位,允许它甚至针对 POCO 工作 - 因此您可以将它与您无法控制的类型一起使用。
| 归档时间: |
|
| 查看次数: |
2732 次 |
| 最近记录: |