联合 API 是专为提供不限制格式的编程模型而设计的,该编程模型允许将联合内容以各种格式写入到网络中。 抽象数据模型由以下类组成:
这些类紧密映射到 Atom 1.0 规范中定义的构造,尽管某些名称不同。
联合协议的关键功能是扩展性。 Atom 1.0 和 RSS 2.0 都向未在规范中定义的聚合源添加属性和元素。 Windows Communication Foundation (WCF) 联合编程模型提供了以下处理自定义属性和扩展、松散类型访问和派生新类的方法。
松散类型访问
通过派生新类来添加扩展需要编写其他代码。 另一种选择是以松散类型方式访问扩展。 联合抽象数据模型中定义的所有类型都包含AttributeExtensions
和ElementExtensions
命名的属性(有一个例外,SyndicationContent有一个AttributeExtensions
属性,但没有ElementExtensions
属性)。 这些属性是未分别由 TryParseAttribute
和 TryParseElement
方法处理的扩展的集合。 可以通过在SyndicationElementExtensionCollection.ReadElementExtensions、ElementExtensions
、SyndicationFeed、SyndicationItem和SyndicationLink的属性上调用SyndicationPerson来访问这些未处理的扩展。SyndicationCategory 这组方法查找具有指定名称和命名空间的所有扩展,将它们单独反序列化为实例 TExtension
,并将它们作为对象的集合 TExtension
返回。
派生新类
可以从任何现有的抽象数据模型类派生新类。 当实现一个应用程序并且您在其中使用的大多数源具有特殊扩展时,执行此操作。 在本主题中,程序使用的大多数源都包含一个 MyExtension
扩展。 若要提供改进的编程体验,请执行以下步骤:
创建用于保存扩展数据的类。 在这种情况下,请创建一个名为 MyExtension 的类。
派生名为 MyExtensionItem SyndicationItem 的类,以公开 MyExtension 类型的属性以实现可编程性目的。
重写 MyExtensionItem 类中的 TryParseElement(XmlReader, String),以便在读入 MyExtension 时实例化新的 MyExtension 实例。
在 MyExtensionItem 类中重写 WriteElementExtensions(XmlWriter, String) ,将 MyExtension 属性的内容写入 XML 编写器。
从 SyndicationFeed中派生名为 MyExtensionFeed 的类。
重写 MyExtensionFeed 类中的 CreateItem(),以便实例化 MyExtensionItem 而非默认的 SyndicationItem。 在SyndicationFeed和SyndicationItem中定义了一系列方法,可以创建SyndicationLink、SyndicationCategory和SyndicationPerson对象(例如,CreateLink()、CreateCategory()和CreatePerson())。 所有这些方法都可以重写以创建自定义派生类。