0

インターネットで私の問題について何も見つかりませんでした。プレイリストのデータを逆シリアル化します。

彼は私のコードです:

using (var fs = new FileStream("playlist.xml", FileMode.OpenOrCreate))
{
 XmlSerializer xml = new XmlSerializer(typeof(ObservableCollection<Playlist>));
 if (fs.Length > 0)
  pl = (ObservableCollection<Playlist>)xml.Deserialize(fs);
 else
  pl = new ObservableCollection<Playlist>();
}

結果の XML は次のとおりです。

    <?xml version="1.0"?>
    <ArrayOfPlaylist xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
       <Playlist>
        <Name>Playlist1</Name>
          <List>
             <Media>
                <path>C:\Users\Tchiko\Videos\Suit Tie (Official Lyric Video).mp4</path>
                <name>Suit Tie (Official Lyric Video).mp4</name>
                <type>Video</type>
             </Media>
         </List>
     </Playlist>
     <Playlist>
        <Name>Hip hop</Name>
          <List>
            <Media>
              <path>C:\Users\Tchiko\Videos\Suit Tie (Official Lyric Video).mp4</path>
              <name>Suit Tie (Official Lyric Video).mp4</name>
              <type>Video</type>
            </Media>
         </List>
      </Playlist>
</ArrayOfPlaylist>

プレイリストをロードする前に、ユーザーが手動でファイルを破損したかどうかを確認したいと考えています。逆シリアル化後の競合を避けるために、XML 形式が適切かどうかを確認する必要があります。

編集: よくない形式のエラーを回避するためのバージョン:

        using (var fs = new FileStream("playlist.xml", FileMode.OpenOrCreate))
        {
            try
            {
                XmlSerializer xml = new XmlSerializer(typeof(ObservableCollection<Playlist>));
                if (fs.Length > 0)
                    pl = (ObservableCollection<Playlist>)xml.Deserialize(fs);
                else
                    pl = new ObservableCollection<Playlist>();
            }
            catch (Exception ex)
            {  
                pl = new ObservableCollection<Playlist>();
            }
        }

助けてくれてありがとう

4

1 に答える 1

0

XML の有効性を保証するには、XML スキーマを定義する必要があります。XML スキーマは、XML で許可されるタグ、順序、値の型を宣言します。

これは、スキーマに対して XML を検証する方法に関する記事です。

XML が適切な形式でない場合 (ユーザーがタグなどを閉じていない場合など)、逆シリアル化は失敗InvalidOperationExceptionし、InnerException. MSDN のXmlSerializer.Deserialize()を参照してください。

于 2013-04-01T11:05:16.827 に答える