如何反序列化RSS?

时间:2013-07-17 09:45:02

标签: c# xml rss deserialization

这是我的代码:

var objectText = XmlReader.Create(requestedURL);
XmlSerializer mySerializer = new XmlSerializer(typeof(InstagramItems));
var instagramItems = (InstagramItems)mySerializer.Deserialize(objectText);

但似乎无法使用RSS(“或多或少是XML”):

Server Error - <rss xmlns=''> was not expected.

我该怎么办?我相信有.NET库而不使用第三部分插件。

RSS的一部分:

<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:georss="http://www.georss.org/georss" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
<channel>
  <title>Photos tagged as "example" on Instagram</title>
  <link>http://instagram.com</link>
  <description>Photos tagged as "example" on Instagram</description>
  <atom:link href="http://instagram.com/tags/example/feed/recent.rss" rel="self" />
</channel>

2 个答案:

答案 0 :(得分:2)

第1步:下载RSS XSD:http://www.thearchitect.co.uk/schemas/rss-2_0.xsd

步骤2:使用xsd.exe根据架构生成RSS类型

步骤3:如果objectText只是一个RSS文档,那么只需在上面的代码中用新创建的RSS类型代替InstagramITems。

步骤3a:如果对象文本是Instagram和RSS代码混合,则在尝试反序列化之前使用DataContractSerializer并使用DataContractSerializer预注册Instagram和RSS类型

答案 1 :(得分:1)

XmlSerializer使用特定的xml格式,如果你提供任何其他格式,那么它预期会引发所谓的异常。

你可以手工解析xml并从解析的xml创建InstagramItems,我建议使用linq到xml这里是一个例子http://social.msdn.microsoft.com/Forums/vstudio/en-US/e38e69ac-d325-4cc4-bdf7-bc940e19e63f/read-xml-and-create-objects-using-linq