2009-09-04 74 views
2

我使用.NET序列化类来序列化和记录传递给我的应用程序中的某些功能的参数值。为此,我需要一种方法来XML序列化通过任何类的属性值,但会忽略任何不能被XML序列化的属性(例如,任何Image类型属性)的获取XML序列化,以自动忽略不可序列化的属性

我可以通过我的课程并使用[XmlIgnore]属性标记这些属性,但理想情况下我想要一个序列化程序只是跳过这些属性。

这是可以实现的吗?

回答

2

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

0

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

0

如果你控制一个通用的基类,你可以通过反射来实现 - 否则这可能是一个麻烦。你可以实现一个自定义的Xml序列化方案 - 这并不难,但我怀疑它是值得的。另外,如果你“自动”忽略了所有类的不可序列化的属性,那么你需要考虑你所在的级别 - 否则以前的不可序列化的类自己可以序列化,但是只有他们自己的一些属性这不是(完全)可序列化的。

0

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

祝你好运!

编辑:检查Thomas的评论如下。我想他是对的。

+1

我会建议针对该路由:XmlSerializer不会直接执行序列化,它会生成另一个程序集来执行此操作。所以你将不得不改变序列化程序集的生成方式,这可能很难...... – 2009-09-04 09:02:00