我在互联网上找不到任何问题。 我反序列化播放列表的数据。
他是我的代码:
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>();
}
}
感谢帮助
答案 0 :(得分:0)
为确保XML有效性,您需要定义XML Schema。 XML Schema声明XML中允许的标记,顺序和值的类型。
Here是一篇关于如何针对Schema验证XML的文章。
如果您的XML格式不正确(例如,用户没有关闭标记或类似的东西),反序列化将失败,您将获得InvalidOperationException
更多详细信息{ {1}}。请参阅MSDN上的XmlSerializer.Deserialize()。