【问题标题】:Serializing a container of RSS feeds?序列化一个 RSS 提要容器?
【发布时间】:2011-06-02 16:42:21
【问题描述】:

我正在为 RSS 客户端开发一个项目。现在我正在使用SyndicationFeedXmlReader 检索提要并将其添加到列表中:

SyndicationFeed feed = SyndicationFeed.Load(
    XmlReader.Create("SOME URL TO A FEED"));
List<SyndicationFeed> feeds = new List<SyndicationFeed>();
feeds.Add(feed);

SyndicationFeed 及其大部分属性不可序列化。当我的程序关闭时,我需要能够保存提要及其各自的项目。我有一个使用实体框架的数据库解决方案,但我想摆脱这个。所以我的下一个想法是简单地序列化包含所有提要的容器,但这不行。我应该编写模仿SyndicationFeed 及其属性的serializabl 类并进行某种装箱和拆箱,还是有更好的方法?

【问题讨论】:

    标签: c# .net serialization rss feed


    【解决方案1】:

    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>
    

    我会使用XDocumentXElement 实例来处理创建上面的容器,因为使用这些类时,命名空间管理要容易得多。此外,XElement 类公开了一个CreateWriter 和一个CreateReader,它们将分别公开XmlWriterXmlReader 实例,然后您可以将它们传递给您的SaveAsAtom/SaveAsRss20 方法。

    但是,我希望您将每件物品分开存放;根据您拥有的提要数量,创建一个庞大的超级文档可能会过多地消耗资源,具体取决于您的需求。单个文档实例保存在您可以独立访问的单个实体中,处理起来可能会更有效率。

    您仍然可以使用SaveAsAtom10SaveAsRss20 方法来序列化提要。

    【讨论】:

    • 谢谢。所以只需将每个提要保存在磁盘上自己的文档中?
    • @Pete:我就是这样做的。我会以这样一种方式命名它,以便您知道如何检索特定的提要(如果需要),或者如果您需要将它们作为一个整体进行处理,您可以枚举目录中的文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多