Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 让XML序列化自动忽略不可序列化的属性_.net_Serialization_Xml Serialization - Fatal编程技术网

.net 让XML序列化自动忽略不可序列化的属性

.net 让XML序列化自动忽略不可序列化的属性,.net,serialization,xml-serialization,.net,Serialization,Xml Serialization,我正在使用.NET序列化类对传递给应用程序中某些函数的XML序列化和日志参数值进行序列化。为此,我需要一种方法,用XML序列化任何获得传递的类的属性值,但忽略任何不能用XML序列化的属性(例如任何Imagetype属性) 我可以遍历我的类,并使用[XmlIgnore]属性标记这些属性,但理想情况下,我想要一个跳过这些属性的序列化程序 这是可以实现的吗?这可能与您的“XMLIgnore”想法一样有效,但是您可以使用XPath只将可序列化的部分传递给序列化函数。如果您控制一个公共基类,您可以通过反射

我正在使用.NET序列化类对传递给应用程序中某些函数的XML序列化和日志参数值进行序列化。为此,我需要一种方法,用XML序列化任何获得传递的类的属性值,但忽略任何不能用XML序列化的属性(例如任何
Image
type属性)

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


这是可以实现的吗?

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

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


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

您应该将XmlSerializer子类化,并重写虚拟保护序列化(object,XmlSerializationWriter)方法。您可能需要实现自己的XmlSerializationWriter

祝你好运


编辑:检查托马斯在下面的评论。我想他是对的。

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

我建议不要使用该方法:XmlSerializer不直接执行序列化,而是生成另一个程序集来执行。因此,您必须更改序列化程序集的生成方式,这可能非常困难。。。