【问题标题】:Can I control serialization of certain fields using XmlSerializer我可以使用 XmlSerializer 控制某些字段的序列化吗
【发布时间】:2011-12-23 18:10:07
【问题描述】:

我可以在 c# 中使用 XmlSerializer 控制某些字段的序列化吗? Fox 示例将一个名为“Type”(string) 的属性序列化为其他内容而不是字符串。 提前致谢。

【问题讨论】:

  • 您可以根据 [Serializable] 属性控制要序列化的内容,例如,您可以选择让整个类序列化或仅对某些属性进行序列化

标签: c# .net xml c#-4.0


【解决方案1】:

你可以通过XmlElement/XmlAttribute注解来控制一些东西——元素的名字,是属性还是完整的XML元素等等。但是,你不能直接改变类型。如果你需要支持任何类型的复杂序列化方案,XmlSerializer 不是一个好的选择,因为它有很多限制。您最好使用DataContractSerializer(请参阅 WCF 文档中的"Using Data Contracts")或者甚至自己编写。

如果您只想更改生成的序列化数据的 XML 类型(例如,使用自定义 XML 类型或命名空间),您可以使用 XmlType 属性来做到这一点,但这只会适用于您已声明的类型而不是原始 CLR 类型(例如,您不能将字符串转换为整数或其他更复杂的类型)。

【讨论】:

    【解决方案2】:

    我想你想要IXmlSerializable interface

    您无法仅使用属性来控制输入。您必须滚动自己的代码来序列化/反序列化该类。该界面允许您这样做。

    【讨论】:

      【解决方案3】:

      你可以通过XMLIgnore属性控制你想要序列化的内容。这不会序列化被这个属性修饰的属性。

      你也可以使用 XMLType 来管理一个类型是如何被 XML 序列化器序列化的,但这并不意味着你可以直接影响 CLR 类型。

      您不能使用序列化来更改 CLR 类型。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-23
        • 2011-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-31
        相关资源
        最近更新 更多