C#在反序列化之前检查XML文件是否已损坏

C#在反序列化之前检查XML文件是否已损坏,c#,visual-studio-2010,serialization,xml-serialization,filestream,C#,Visual Studio 2010,Serialization,Xml Serialization,Filestream,我在网上找不到任何解决我问题的方法。 我为播放列表反序列化数据 他是我的密码: using (var fs = new FileStream("playlist.xml", FileMode.OpenOrCreate)) { XmlSerializer xml = new XmlSerializer(typeof(ObservableCollection<Playlist>)); if (fs.Length > 0) pl = (ObservableCollection

我在网上找不到任何解决我问题的方法。 我为播放列表反序列化数据

他是我的密码:

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>();
}
使用(var fs=new FileStream(“playlist.xml”,FileMode.OpenOrCreate))
{
XmlSerializer xml=新的XmlSerializer(typeof(observateCollection));
如果(fs.Length>0)
pl=(ObservableCollection)xml.Deserialize(fs);
其他的
pl=新的ObservableCollection();
}
以下是结果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>

播放列表1
C:\Users\chiko\Videos\Suit Tie(官方歌词视频)。mp4
西装领带(官方歌词视频).mp4
视频
嘻哈舞曲
C:\Users\chiko\Videos\Suit Tie(官方歌词视频)。mp4
西装领带(官方歌词视频).mp4
视频
在加载我的播放列表之前,我想检查是否有用户手动损坏了该文件。 我需要检查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>();
            }
        }
使用(var fs=new FileStream(“playlist.xml”,FileMode.OpenOrCreate))
{
尝试
{
XmlSerializer xml=新的XmlSerializer(typeof(observateCollection));
如果(fs.Length>0)
pl=(ObservableCollection)xml.Deserialize(fs);
其他的
pl=新的ObservableCollection();
}
捕获(例外情况除外)
{  
pl=新的ObservableCollection();
}
}

感谢您的帮助

为了确保XML的有效性,您需要定义一个XML模式。XML模式声明XML中允许哪些标记、顺序和值类型

是一篇关于如何根据模式验证XML的文章


如果您的XML格式不正确(如中所示,用户没有关闭标记或类似的内容),反序列化将失败,您将得到一个
invalidoOperationException
,详细信息请参见
InnerException
。请参阅MSDN上的。

如果xml已损坏,序列化将失败。是的,我将代码放入一个try,catch中,我现在可以避免错误。谢谢,我把我的代码放在编辑部分