2017-08-26 9 views
0

xsd.exeでxsdスキーマから生成されたクラスがあります。私はスキーマを制御できません。 XmlSerlializerでの読み書き、シリアル化されたデータの検証はうまくいきます。 私は、スキーマのルールに基づいて、ユーザー入力を含むデータにオンラインエラーチェックを実装したいと考えています。繰り返しますが、シリアライズと検証の問題はありませんが、フォールトの位置を追跡する簡単な方法は見当たりません。どのクラスのインスタンスが発生したのでしょうか。 XmlValidatingWriterが存在しない理由は、クラスが既にスキーマの互換性を保証しているということですが、これはxsd.exe生成クラスでは当てはまりません。 XmlSchemaValidator push-based validationについてのページがありますが、これは私のクラスのすべてがxml直列化可能であるという事実を完全に無視しているようなスーパーマニュアルに見えます。障害位置のXSDに対するC#データ検証

私は同様の質問を見つけましたが、誰もこの特定の目標を持っていないようです。私は解決策につながる答えを見つけることもできませんでした。私は何らかの理由でこれが不可能であると結論づけました。現時点では私には見えますが、その理由を理解して、私のアーキテクチャ全体が間違っていた場所を知りたいと思います。

ありがとうございます。

+0

ほとんどの 'XmlReader'インスタンスは[' IXmlLineInfo'](https://msdn.microsoft.com/en-us/library/system.xml.ixmllineinfo.aspx)を実装しています。 'XElement' [これも実装しています](https://stackoverflow.com/a/4471030/3744182)。 XMLの検証方法に応じて、[この回答](https://stackoverflow.com/a/29882953/3744182)または[こちら](https: //stackoverflow.com/a/621069/3744182)。 XMLを検証する方法を示す[mcve]を共有するために質問を編集できますか? – dbc

+0

また、 'XmlSchemaException'には行と位置の情報があります。 [XmlReaderSettings.ValidationEventHandler'](https://msdn.microsoft.com/en-us/library/system.xml.xmlreadersettings.validationeventhandler(v = vs.110).aspx)に正しくあります。行く。 – dbc

+0

デシリアライズ時に検証する一般的なメソッドについては、[要素が見つからない場合はC#でXmlSerializerを使用して逆シリアル化できませんか?](https://stackoverflow.com/a/259969/3744182)を参照してください。検証に失敗すると、 'XmlSchemaException'を含む[ValidationEventArgs'](https://msdn.microsoft.com/en-us/library/system.xml.schema.validationeventargs(v = vs.110).aspx)が渡されます。 。 – dbc

答えて

1

ここに私がやったことがあります。私はそれを誇りに思いません。

  1. 私はすべてのxmlノードが継承する基本クラスを持っています。私はxml属性としてマークされているxmlignore属性を持っているため、通常の直列化/逆シリアル化に参加しないようにGUIDプロパティを追加しました。
  2. 私は検証のためにシリアル化しようとしていますが、xmlattributesoverrideを作成してGUIDプロパティのxmlignoreを取り除きます。 guidは各要素のxml属性にシリアル化されます。
  3. 新しいXDocumentを作成し、それにシリアル化します。
  4. 私は検証するために必要なスキーマを使用してXDocument.Validateを実行します。
  5. 検証イベントハンドラでは、追加のguid属性について不平を言うすべてのエラーを無視します。
  6. 実際の検証エラーまたは警告が表示されたら、guidに基づいてその特定の要素にシリアル化された実際のオブジェクトを見つけることができます。
  7. 利益。

私はおそらく非常に非効率的ですが、私はそれを使って作業しているデータのサイズは大丈夫です。

関連する問題