【发布时间】:2011-12-23 18:10:07
【问题描述】:
我可以在 c# 中使用 XmlSerializer 控制某些字段的序列化吗? Fox 示例将一个名为“Type”(string) 的属性序列化为其他内容而不是字符串。 提前致谢。
【问题讨论】:
-
您可以根据 [Serializable] 属性控制要序列化的内容,例如,您可以选择让整个类序列化或仅对某些属性进行序列化
我可以在 c# 中使用 XmlSerializer 控制某些字段的序列化吗? Fox 示例将一个名为“Type”(string) 的属性序列化为其他内容而不是字符串。 提前致谢。
【问题讨论】:
你可以通过XmlElement/XmlAttribute注解来控制一些东西——元素的名字,是属性还是完整的XML元素等等。但是,你不能直接改变类型。如果你需要支持任何类型的复杂序列化方案,XmlSerializer 不是一个好的选择,因为它有很多限制。您最好使用DataContractSerializer(请参阅 WCF 文档中的"Using Data Contracts")或者甚至自己编写。
如果您只想更改生成的序列化数据的 XML 类型(例如,使用自定义 XML 类型或命名空间),您可以使用 XmlType 属性来做到这一点,但这只会适用于您已声明的类型而不是原始 CLR 类型(例如,您不能将字符串转换为整数或其他更复杂的类型)。
【讨论】:
我想你想要IXmlSerializable interface
您无法仅使用属性来控制输入。您必须滚动自己的代码来序列化/反序列化该类。该界面允许您这样做。
【讨论】:
你可以通过XMLIgnore属性控制你想要序列化的内容。这不会序列化被这个属性修饰的属性。
你也可以使用 XMLType 来管理一个类型是如何被 XML 序列化器序列化的,但这并不意味着你可以直接影响 CLR 类型。
您不能使用序列化来更改 CLR 类型。
【讨论】: