获取XML序列化以自动忽略不可序列化的属性

时间:2009-09-04 08:16:32

标签: .net serialization xml-serialization

我正在使用.NET序列化类来序列化和记录传递给我的应用程序中某些函数的参数值。为此,我需要一种方法来XML序列化任何获取传递的类的属性值,但忽略任何无法进行XML序列化的属性(例如任何Image类型属性)。

我可以浏览我的类并使用[XmlIgnore]属性标记这些属性,但理想情况下我想要一个跳过这些属性的序列化器。

这可以实现吗?

4 个答案:

答案 0 :(得分:2)

您可以使用反射动态创建XmlAttributeOverrides对象,以在相关属性上添加XmlIgnore属性。您只需要实现逻辑来确定给定类型是否符合XML序列化的条件,并以递归方式浏览对象图。完成创建XmlAttributeOverrides对象后,只需将其传递给XmlSerializer构造函数

答案 1 :(得分:0)

这可能和您的“XMLIgnore”想法一样高效,但您可以使用XPath仅将可序列化部分传递给序列化函数。

答案 2 :(得分:0)

如果你控制一个公共基类,你可以通过反射实现这个 - 否则这可能是一个麻烦。你可以实现一个自定义的Xml序列化方案 - 它并不难,但我怀疑它是值得的。

此外,如果你“自动”忽略所有类的不可序列化的属性,你需要考虑你这样做的级别 - 否则以前不可序列化的类本身就变得可序列化了,但是只有它们自己的一些属性不是(完全)可序列化的。

答案 3 :(得分:0)

您应该继承XmlSerializer,并覆盖虚拟保护的Serialize(object,XmlSerializationWriter)方法。您可能需要实现自己的XmlSerializationWriter。

祝你好运!

修改:查看托马斯的评论如下。我猜他是对的。