新聞訂閱擴充性
新聞訂閱 API 主要是提供格式中性的程式設計模型,以允許以各種格式將新聞訂閱內容寫入網路中。抽象資料模型包含下列類別:
這些類別可緊密地對應至 Atom 1.0 規格中所定義的建構,儘管其中有些名稱不同。
擴充性是新聞訂閱通訊協定的一項重要功能。Atom 1.0 和 RSS 2.0 兩者都會將屬性和項目新增到規格中未定義的新聞訂閱摘要中。Windows Communication Foundation (WCF) 新聞訂閱程式設計模型提供下列各種方法,供您與自訂屬性與延伸及鬆散型別的存取搭配使用,並衍生出新的類別。
鬆散型別存取
您需要撰寫額外的程式碼,才能藉由衍生新類別來新增延伸。另一種方式則是透過鬆散型別方式來存取延伸。在新聞訂閱抽象資料模型中定義的所有型別都包含名為 AttributeExtensions 和 ElementExtensions 的屬性,唯一的例外是,SyndicationContent 具有 AttributeExtensions 屬性,但不包含 ElementExtensions 屬性。這些屬性是分別是 TryParseAttribute 和 TryParseElement 方法無法處理之延伸的集合。您可以呼叫 ElementExtensions 屬性 (屬於 SyndicationFeed、SyndicationItem、SyndicationLink、SyndicationPerson 和 SyndicationCategory) 上的 System.ServiceModel.Syndication.SyndicationElementExtensionCollection.ReadElementExtensions.String,System.String) 存取這些未處理的延伸。這群方法集合會先找到所有包含指定名稱和命名空間的延伸、加以個別還原序列化為 TExtension 的執行個體,然後將它們當成 TExtension 物件的集合傳回。
衍生新的類別
您可以從任何一個現有的抽象資料模型類別中衍生新的類別。在您實作應用程式時,如果所使用的大部分摘要都包含特定延伸時,就可以這麼做。在本主題中,程式使用的大部分摘要都包含 MyExtension 延伸。若要提供更好的程式設計體驗,請執行下列步驟:
- 建立可保留延伸資料的類別。在此案例中,建立名為 MyExtension 的類別。
- 從 SyndicationItem 衍生名為 MyExtensionItem 的類別並公開型別 MyExtension 的屬性以供程式設計之用。
- 讀入 MyExtension 時,覆寫 MyExtensionItem 類別中的 TryParseElement 以產生新的 MyExtension 執行個體。
- 覆寫 MyExtensionItem 類別中的 WriteElementExtensions 以將 MyExtension 屬性內容寫入 XML 寫入器。
- 從 SyndicationFeed 衍生稱為 MyExtensionFeed 的類別。
- 覆寫 MyExtensionFeed 類別中的 CreateItem 以產生 MyExtensionItem,而不是預設的 SyndicationItem。SyndicationFeed 和 SyndicationItem 中定義了一系列的方法,可建立 SyndicationLink、SyndicationCategory 和 SyndicationPerson 物件 (例如,CreateLink、CreateCategory 和 CreatePerson)。這些全部都可加以覆寫,以建立自訂的衍生類別。