基本上,最初的问题是我需要将布尔值序列化为 0 或 1。我找到的解决方案是实现 IXmlSerializable,我做到了。不幸的是,我试图序列化的类是从模式生成的代码,并且上面有一个 XmlTypeAttribute。当我尝试使用以通常方式(new XmlSerializer(type)
)创建的 XmlSerializer 对对象进行(反)序列化时,它会引发此异常:
System.InvalidOperationException: Only XmlRoot attribute may be specified for the type ______ Please use XmlSchemaProviderAttribute to specify schema type.
立即想到两个选择:
1)删除生成代码中的属性。每次重新生成代码时都必须进行此更改。
2) 在创建序列化程序时使用 XmlAttributeOverrides 对象来移除属性。这将要求代码库的其余部分“知道”它需要覆盖该属性。此外,抛出的异常绝对不提供关于需要做什么来修复它的任何线索。
两种选择都有点臭。有第三种选择吗?