gpt4 book ai didi

c# - 序列化 RSS 提要的容器?

转载 作者:行者123 更新时间:2023-11-30 22:38:09 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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处理创建上述容器的实例,因为在使用这些类时 namespace 管理容易。此外,XElement 类公开了一个 CreateWriter和一个 CreateReader ,这将分别公开 XmlWriterXmlReader 实例,然后您可以将它们传递给您的 SaveAsAtom/SaveAsRss20 方法。

但是,我想提醒您将每件元素分开存放;根据您拥有的提要数量,创建一个庞大的 super 文档可能会消耗太多资源,具体取决于您的需要。保存在您可以独立访问的单个实体中的单个文档实例的处理效率可能会高得多。

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

关于c# - 序列化 RSS 提要的容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6217487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com