序列化RSS提要的容器?
我正在为一个RSS客户端项目工作。现在,我使用SyndicationFeed
和XmlReader
取得源并将其添加到列表:序列化RSS提要的容器?
SyndicationFeed feed = SyndicationFeed.Load(
XmlReader.Create("SOME URL TO A FEED"));
List<SyndicationFeed> feeds = new List<SyndicationFeed>();
feeds.Add(feed);
SyndicationFeed
和大部分属性是不可序列。当我的程序关闭时,我需要能够保存提要及其各自的项目。我有一个与Entity Framework一起工作的数据库解决方案,但我想摆脱这一点。所以我的下一个想法是简单地序列化所有的饲料容器,但这是不行的。我应该写一个模仿SyndicationFeed
及其属性,做一个排序拳和拆箱或是否有更好的办法serializabl类?
的SyndicationFeed
类有一个SaveAsAtom10
method和SaveAsRss20
method,两者取XmlWriter
例如,你可以使用任何东西作为底层存储。
就个人而言,我会用SaveAsAtom10
方法去,因为我相信Atom是更丰富的格式。
这就是说,你可以很容易地通过创建自己的命名空间的根元素和子元素,然后让每个进料的内容作为孩子,像这样坚持到一个更大的单个文件这样的:
<feeds xmlns="http://tempuri.org/MyFeedContainer">
<feed>
<!-- Atom feed -->
</feed>
<feed>
<!-- Rss feed -->
</feed>
<!-- And so on.. -->
</feeds>
我会用XDocument
和XElement
实例来处理创建上面的容器,因为命名空间管理是,使用这些类时更容易。此外,XElement
类将公开CreateWriter
和CreateReader
,它们将分别公开XmlWriter
和XmlReader
实例,然后您可以将它们传递给您的SaveAsAtom
/SaveAsRss20
方法。
不过,我会在你身上留下深刻的印象存储每个单独的项目;取决于您有多少Feed,创建一个大型超级文档可能会耗费太多资源,具体取决于您的需求。单个文档实例持久存储在您可以独立访问的单个实体中,可能会更有效地处理。
你仍然可以使用SaveAsAtom10
和SaveAsRss20
方法序列化的饲料。
谢谢。那么只要将每个供稿源保存在磁盘上的自己的文档中? – Pete 2011-06-02 21:46:22
@Pete:我就是这么做的。我想在你知道如何检索比给料(如果需要的话),也可以通过在目录中的文件只是列举,如果你需要处理他们作为一个整体的方式命名。 – casperOne 2011-06-02 21:50:16