我正在使用.NET序列化类来序列化和记录传递给我的应用程序中某些函数的参数值。为此,我需要一种方法来XML序列化任何获取传递的类的属性值,但忽略任何无法进行XML序列化的属性(例如任何Image
类型属性)。
我可以浏览我的类并使用[XmlIgnore]
属性标记这些属性,但理想情况下我想要一个跳过这些属性的序列化器。
这可以实现吗?
答案 0 :(得分:2)
您可以使用反射动态创建XmlAttributeOverrides
对象,以在相关属性上添加XmlIgnore
属性。您只需要实现逻辑来确定给定类型是否符合XML序列化的条件,并以递归方式浏览对象图。完成创建XmlAttributeOverrides
对象后,只需将其传递给XmlSerializer
构造函数
答案 1 :(得分:0)
这可能和您的“XMLIgnore”想法一样高效,但您可以使用XPath仅将可序列化部分传递给序列化函数。
答案 2 :(得分:0)
如果你控制一个公共基类,你可以通过反射实现这个 - 否则这可能是一个麻烦。你可以实现一个自定义的Xml序列化方案 - 它并不难,但我怀疑它是值得的。
此外,如果你“自动”忽略所有类的不可序列化的属性,你需要考虑你这样做的级别 - 否则以前不可序列化的类本身就变得可序列化了,但是只有它们自己的一些属性不是(完全)可序列化的。
答案 3 :(得分:0)
您应该继承XmlSerializer,并覆盖虚拟保护的Serialize(object,XmlSerializationWriter)方法。您可能需要实现自己的XmlSerializationWriter。
祝你好运!修改:查看托马斯的评论如下。我猜他是对的。