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

C# 在具有XmlTypeAttribute的生成类上实现IXmlSerializable,c#,.net,xml-serialization,ixmlserializable,xmltype,C#,.net,Xml Serialization,Ixmlserializable,Xmltype,基本上,最初的问题是我需要将布尔值序列化为0或1。我找到的解决方案是实现IXmlSerializable,我做到了。不幸的是,我试图序列化的类是从模式中生成的代码,上面有一个XmlTypeAttribute。当我尝试使用以常规方式创建的XmlSerializer(反)序列化对象时(new XmlSerializer(type)),它会引发以下异常: System.invalidoOperationException:只能为类型指定XmlRoot属性。\uuuuuuuuuuuuuuuuuuuuuu

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

System.invalidoOperationException:只能为类型指定XmlRoot属性。\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu请使用XmlSchemaProviderAttribute指定架构类型。

我马上想到两个选择:

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

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


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

我也有同样的问题,对于我来说删除IXMLSerializable works,我不使用它,并且您是否尝试在属性中使用某种逻辑来隐藏true或false?像这样:

private bool mblnFlag;

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

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

我也有同样的问题,对于我来说,删除IXMLSerializable工作,我不使用它,并且您是否尝试在属性中使用某种逻辑来隐藏真或假?像这样:

private bool mblnFlag;

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

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

为什么它有
[XmlType]
属性?这正是Xsd2Code生成它的方式。说我使用的模式是一个巨大的野兽是一种轻描淡写的说法。Xsd.exe和其他工具要么崩溃,要么使用自定义库输出40mb代码。出于其他原因,我最终不得不修改生成的代码。但是,如果有第三种方法可以解决这个问题,那么另一种方法也可以。为什么它有
[XmlType]
属性?这就是Xsd2Code生成它的方式。说我使用的模式是一个巨大的野兽是一种轻描淡写的说法。Xsd.exe和其他工具要么崩溃,要么使用自定义库输出40mb代码。出于其他原因,我最终不得不修改生成的代码。但是,如果有第三种方法可以解决这个问题,那么另一种方法也可以。我通过注释XmlTypeAttribute来解决我的问题,但是修改生成代码感觉很脏,我希望有第三种方法不涉及修改生成的代码。我可能只是在做梦:(我通过注释XmlTypeAttribute来解决我的问题,但是修改生成代码感觉很脏,我希望有第三个选项不涉及修改生成的代码。我可能只是在做梦:(