3

xsd.exe を使用するためのクラスを生成した XSD スキーマがありXmlSerializer.Deserialize、XSD スキーマに準拠するはずの XML ファイルからそのクラスのインスタンスを作成するために使用しようとしています。残念ながら、XML ファイルには、スキーマが想定していない余分な要素が含まれているため、System.InvalidOperationExceptionから がスローされDeserializeます。

スキーマに要素を追加しようとしまし<xs:any>たが、違いはないようです。

XmlSerializer.Deserialize私の質問は、これらの余分な要素を無視する方法はありますか?

4

2 に答える 2

5

通常、すべてのエンティティ クラスに追加のプロパティまたはフィールドを追加して、追加の要素と属性を取得します。以下のコードのようになります。

[XmlAnyAttribute]
public XmlAttribute[] AnyAttributes;

[XmlAnyElement]
public XmlElement[] AnyElements;

生成されたコードの複雑さによっては、すべてのエンティティにこのコードを手動で挿入することが魅力的ではない場合があります。おそらく、基本クラスでこれらの属性を定義し、すべてのエンティティが基本を確実に継承するようにすることは、少し退屈なだけです。

公平な帰属を示すために、DasBlog のソース コードを読んだときに、このパターンを初めて知りました。

于 2010-08-17T02:29:26.930 に答える
2

これを行うオプションはないと思います。XML を逆シリアル化できるようにするには、スキーマを修正するか、xsd.exe によって生成されたコードを手動で変更する必要があります。また、Visual Studio またはスキーマをサポートするその他の XML エディターで XML ドキュメント + スキーマを開いて、スキーマまたは XML ドキュメントを修正することもできます。

于 2010-08-07T14:57:55.887 に答える