2

基本上,最初的问题是我需要将布尔值序列化为 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 对象来移除属性。这将要求代码库的其余部分“知道”它需要覆盖该属性。此外,抛出的异常绝对不提供关于需要做什么来修复它的任何线索。

两种选择都有点臭。有第三种选择吗?

4

1 回答 1

0

我有同样的问题,对我来说删除 IXMLSerializable 作品,我不使用它,您是否尝试使用属性中的某些逻辑隐藏真假?像这样:

private bool mblnFlag;

public String Flag 
{
   get
   {
      return mblnFlag;
   }
   set
   {
      mblnFlag = (value == "1")
   }
}

当然,您应该增强属性并进行更多检查,但这就是想法。

于 2010-04-30T17:31:34.903 回答