XMLSerializer的特殊getter和setter

时间:2011-04-10 17:25:27

标签: c# xml-serialization

我有一个包含许多从文件加载的资源的类。想要将此类的对象序列化为XML,但要使用资源路径而不是实际资源本身。

现在我通过创建一些ResourceSource字段来解决这个问题,这些字段存储资源的路径并在资源本身上使用XMLIgnore。但是,这些必须是公开的,这不是很好。

我真正想要的是能够创建仅由XMLSerialize执行的特殊属性访问器。这个功能是否存在或者是否有可能实现它?

或者,我可以将ResourceSource字段设置为只能由XMLSerialize访问吗?

2 个答案:

答案 0 :(得分:1)

您是否考虑过实施IXmlSerializable?这使您可以更精细地控制序列化过程。

  

实现此接口有两个原因。第一个是控制XmlSerializer对象的序列化或反序列化方式。例如,您可以将数据块化为字节而不是缓冲大数据集,还可以避免使用Base64编码对数据进行编码时出现的膨胀。要控制序列化,请实现ReadXml和WriteXml方法来控制用于读取和写入XML的XmlReader和XmlWriter类。

     

第二个原因是能够控制架构。要启用此功能,必须将XmlSchemaProviderAttribute应用于可序列化类型,并指定返回架构的静态成员的名称。

答案 1 :(得分:0)

听起来你的班级负担过重而有多重责任,这几乎总是一个红旗,是时候进行一些重构了。

我要做的是有一个可序列化的类存储资源路径,另一个存储资源本身。非序列化类的构造函数可以获取序列化类的实例,从磁盘加载资源等。