2

基本的に、最初の問題は、ブール値を0または1としてシリアル化する必要があることです。私が見つけた解決策は、IXmlSerializableを実装することでした。残念ながら、私がシリアル化しようとしているクラスは、スキーマから生成されたコードであり、XmlTypeAttributeが含まれています。通常の方法で作成されたXmlSerializerを使用してオブジェクトを(逆)シリアル化しようとすると(new XmlSerializer(type))、次の例外がスローされます。

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

2つのオプションがすぐに思い浮かびます。

1)生成されたコードの属性を削除します。この変更は、コードが再生成されるたびに行う必要があります。

2)シリアライザーを作成するときにXmlAttributeOverridesオブジェクトを使用して、属性を削除します。これには、コードベースの残りの部分がその属性をオーバーライドする必要があることを「知る」必要があります。また、スローされた例外は、それを修正するために何をする必要があるかについての手がかりをまったく与えません。

どちらのオプションもちょっと悪臭を放ちます。3番目のオプションはありますか?

4

1 に答える 1

0

私は同じ問題を抱えています。IXMLSerializableの作品を削除するために、私はそれを使用しません。プロパティのロジックを使用してtrueまたはfalseを非表示にしようとしましたか?このような:

private bool mblnFlag;

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

もちろん、プロパティを強化してさらにチェックを行う必要がありますが、それがアイデアです。

于 2010-04-30T17:31:34.903 に答える