【发布时间】:2010-04-26 13:41:02
【问题描述】:
基本上,最初的问题是我需要将布尔值序列化为 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 对象来移除属性。这将要求代码库的其余部分“知道”它需要覆盖该属性。此外,抛出的异常绝对不提供关于需要做什么来修复它的任何线索。
这两个选项有点臭。还有第三种选择吗?
【问题讨论】:
-
为什么它有
[XmlType]属性? -
这就是 Xsd2Code 生成它的方式。说我使用的模式是一头巨大的野兽是轻描淡写的。 Xsd.exe 和其他工具使用自定义库崩溃或吐出 40mb 的代码。由于其他原因,我最终不得不修改生成的代码。但是,如果有解决此问题的第三种方法,它也可能适用于另一种方法。
标签: c# .net xml-serialization ixmlserializable xmltype