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中,我现在可以避免错误。谢谢,我把我的代码放在编辑部分