在具有XmlTypeAttribute的生成类上实现IXmlSerializable

时间:2010-04-26 13:41:02

标签: c# .net xml-serialization ixmlserializable xmltype

基本上,最初的问题是我需要将布尔值序列化为0或1.我找到的解决方案是实现IXmlSerializable,我做了。不幸的是,我正在尝试序列化的类是从模式生成代码并且在其上有一个XmlTypeAttribute。当我尝试使用以通常方式(new XmlSerializer(type))创建的XmlSerializer(de)序列化对象时,它会抛出此异常:

System.InvalidOperationException: Only XmlRoot attribute may be specified for the type ______ Please use XmlSchemaProviderAttribute to specify schema type.

立即想到两个选项:

1)删除生成的代码中的属性。 每次重新生成代码时都必须进行此更改。

2)在创建序列化程序时使用XmlAttributeOverrides对象来删除属性。这将需要代码库的其余部分“知道”它需要覆盖该属性。此外,抛出的异常绝对没有任何关于修复它需要做什么的线索。

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

1 个答案:

答案 0 :(得分:0)

我有同样的问题,对于我删除IXMLSerializable的工作,我不使用它,你试图用属性中的一些逻辑隐藏真或假?像这样:

private bool mblnFlag;

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

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