2009-07-17 8 views
2

私は最近、MSDNのIXmlSerializableインターフェイス情報を読んで、終了タグの全体について少し混乱しました。XmlSerialization - End Elementタグを読み取っていますか?

私が理解しているように、IXmlSerializableを実装する場合、終了タグを書く必要はありませんが、読み込む必要はありますか?例えば。私のクラスAは、終了タグ

<A> 
    <i>32</i> 
</A> 

しかし、どのようなコンテンツが

<A i="32"/> 

私はここで終了タグを読み込むしようとすると、私はInvalidOperationExceptionがを取得している場合はどうなるを読み取らない場合は、次のエラーでしょう。しかし、私が読んでいるはずのものを判断するために読んだ場合、読者の立場をあまり上げないだろうか?

IXmlSerializableの子(さまざまな型の可能性があります)とIXmlSerializable要素のコレクションを処理する必要があるときに、作業するコードが少し複雑になるため、 。

+0

私はあなたのところにいました。それからLinqにXmlに切り替えました。 – Will

+0

私はLinqに感謝したくありません。私のライブラリが.NET 2.0と互換性を持ち、かつLinqがパフォーマンスの低下により使用することが明らかになった場所を避けていたためです。 – Ian

答えて

1

XmlReaderXPathNavigatorは両方とも、IsEmptyElementというプロパティを実装しています。ドキュメントから

派生クラスでオーバーライドされ、現在のノードがエンドエレメントタグない空要素であるかどうかを示す値を取得します。

あなたは開始要素のイベントを見るとIsEmptyElementtrueであれば、あなたは終了要素イベントのために見てはいけません。開始要素イベントは、その場合の開始と終了の両方として機能します。

+0

情報ありがとうございました。私は、IsEmptyElementが何を意味しているのか誤解しています。私は要素の属性が空ではないことを意味すると仮定しましたが、間違っていると信じています... – Ian

+0

この回答はおかげさまで、ありがとうございます。私はイアンと同じ間違った仮定をしました、私はそのプロパティが直感的に命名されていないと思います。 –

2

私はXmlReader.IsEmptyElementを思い出しています。開始タグでこれが設定されている場合は<a />です。設定されていない場合は<a></a>です。後者は終わりのタグを読み、前者は終わりのタグを読んでいない。

-1

私は、終了タグを読んでいないについては、このビットは、あなたのオブジェクトはより大きな構造に組み込まれているシナリオのためだと思う:

public class Wrapper { 
    public A Wrapped; 
} 

<Wrapper> 
    <Wrapped><i>32</i></Wrapped> 
</Wrapper> 

私はあなたが<Wrapped></Wrapped>ではなく</Wrapper>を読む必要があります期待しています。

+0

downvoteの理由は? –

+0

私は誰かがあなたのコメントが間違っていると言っていると思っているのですか? (私は投票しなかった)。 – Ian

+0

私はどこが間違っているのか知っていればいいので、繰り返しません。 –

関連する問題