代码之家  ›  专栏  ›  技术社区  ›  Josh Sterling

在具有xmltypeattribute的生成类上实现IXMLSerializable

  •  2
  • Josh Sterling  · 技术社区  · 15 年前

    基本上,最初的问题是我需要将布尔值序列化为0或1。我找到的解决方案是实现IXML可序列化,我做到了。不幸的是,我试图序列化的类是从架构生成的代码,上面有一个xmltypattribute。当我尝试(反)序列化对象时,使用以常规方式创建的XmlSerializer( new XmlSerializer(type) )它引发了这个异常:

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

    立即想到两种选择:

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

    2)在创建序列化程序时使用xmlattributeoverrides对象删除该属性。这将要求代码基的其余部分“知道”它需要重写该属性。此外,抛出的异常绝对没有提供需要做什么来修复它的线索。

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

    1 回复  |  直到 12 年前
        1
  •  0
  •   abatishchev Karl Johan    12 年前

    我也有同样的问题,对于我来说,删除IXML可序列化的作品,我不使用它,并且您是否试图用属性中的一些逻辑隐藏正确或错误?这样地:

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

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