Dra*_*tar 1 .net c# xml serialization constructor
我使用内置的 .NET 功能 (XmlSerializer.Deserialize) 将 XML 文件序列化为对象。设置对象的字段后,我想通过调用对象构造函数中的附加代码来处理该数据。不幸的是,单步执行代码会发现在执行序列化逻辑之前首先执行“附加”代码。这使得该方法不可行,因为尚未初始化字段并且没有数据可操作。
这个问题有已知的解决方案吗?到目前为止,我一直调用第二种方法来初始化数据,但它很笨拙且容易出错:必须在每次序列化后调用它(其他程序员可能不知道这一点),否则我必须创建另一个包装器来加载对象(然后东西开始螺旋上升)。
如果正在调用构造函数,它将始终是第一件事(请注意,某些序列化程序会跳过构造函数;XmlSerializer 始终运行公共无参数构造函数)。因此,任何逻辑都必须在属性等中。
您在这里真正描述的是“序列化回调”——即一种让序列化程序在序列化和/或反序列化之前和/或之后运行您的方法的方法;一些序列化程序支持回调——但是,XmlSerializer 不支持。
唯一的选择XmlSerializer是实现IXmlSerializable,但坦率地说,这是一个巨大的痛苦。如果可能,我建议:
DataContractSerializer支持回调并且可以做有限的xml - 不像细粒度的控制XmlSerializer(特别是没有属性);如果你想切换到二进制,protobuf-net 支持回调。
| 归档时间: |
|
| 查看次数: |
1248 次 |
| 最近记录: |