Esempio di estensioni non fortemente tipizzateLoosely-Typed Extensions Sample

Il modello a oggetti di diffusione fornisce supporto dettagliato per lavorare con dati dell'estensione: informazioni presenti nella rappresentazione XML di un feed ma non esposte in modo esplicito da classi quali SyndicationFeed e SyndicationItem.The Syndication object model provides rich support for working with extension data—information that is present in a syndication feed's XML representation but not explicitly exposed by classes such as SyndicationFeed and SyndicationItem. Questo esempio illustra le tecniche di base per lavorare con i dati dell'estensione.This sample illustrates the basic techniques for working with extension data.

Nell'esempio seguente viene utilizzata la classe SyndicationFeed a scopo esemplificativo.The sample uses the SyndicationFeed class for the purposes of the example. Tuttavia, i modelli illustrati in questo esempio possono essere usati con tutte le classi di diffusione che supportano dati di estensione:However, the patterns demonstrated in this sample can be used with all of the Syndication classes that support extension data:

SyndicationFeed

SyndicationItem

SyndicationCategory

SyndicationPerson

SyndicationLink

Esempio XMLSample XML

A scopo di riferimento, in questo esempio viene utilizzato il documento XML seguente.For reference, the following XML document is used in this sample.

<?xml version="1.0" encoding="IBM437"?>  
<feed myAttribute="someValue" xmlns="http://www.w3.org/2005/Atom">  
  <title type="text"></title>  
  <id>uuid:8f60c7b3-a3c0-4de7-a642-2165d77ce3c1;id=1</id>  
  <updated>2007-09-07T22:15:34Z</updated>  
  <simpleString xmlns="">hello, world!</simpleString>  
  <simpleString xmlns="">another simple string</simpleString>  
  <DataContractExtension xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.d  
atacontract.org/2004/07/Microsoft.Syndication.Samples">  
    <Key>X</Key>  
    <Value>4</Value>  
  </DataContractExtension>  
  <XmlSerializerExtension xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://ww  
w.w3.org/2001/XMLSchema" xmlns="">  
    <Key>Y</Key>  
    <Value>8</Value>  
  </XmlSerializerExtension>  
  <xElementExtension xmlns="">  
    <Key attr1="someValue">Z</Key>  
    <Value attr1="someValue">15</Value>  
  </xElementExtension>  
</feed>  

Questo documento contiene le seguenti porzioni di dati dell'estensione:This document contains the following pieces of extension data:

  • Attributo myAttribute dell'elemento <feed>.The myAttribute attribute of the <feed> element.

  • Elemento <simpleString>.<simpleString> element.

  • Elemento <DataContractExtension>.<DataContractExtension> element.

  • Elemento <XmlSerializerExtension>.<XmlSerializerExtension> element.

  • Elemento <xElementExtension>.<xElementExtension> element.

Scrittura dati dell'estensioneWriting Extension Data

Le estensioni dell'attributo vengono create aggiungendo voci alla raccolta AttributeExtensions come mostra il codice di esempio seguente.Attribute extensions are created by adding entries to the AttributeExtensions collection as shown in the following sample code.

//Attribute extensions are stored in a dictionary indexed by   
// XmlQualifiedName  
feed.AttributeExtensions.Add(new XmlQualifiedName("myAttribute", ""), "someValue");  

Le estensioni dell'elemento vengono create aggiungendo voci alla raccolta ElementExtensions.Element extensions are created by adding entries to the ElementExtensions collection. Queste estensioni possono essere valori di base quali stringhe, serializzazioni XML di oggetti .NET Framework o nodi XML codificati a mano.These extensions can by basic values such as strings, XML serializations of .NET Framework objects, or XML nodes coded by hand.

Il codice di esempio seguente crea un elemento dell'estensione denominato simpleString.The following sample code creates an extension element named simpleString.

feed.ElementExtensions.Add("simpleString", "", "hello, world!");  

Lo spazio dei nomi XML per questo elemento è lo spazio dei nomi vuoto ("") e il valore è un nodo di testo che contiene la stringa "hello, world!".The XML namespace for this element is the empty namespace ("") and its value is a text node that contains the string "hello, world!".

Un modo per creare estensioni dell'elemento complesse costituite da molti elementi annidati, consiste nell'utilizzare le API .NET Framework per la serializzazione (sia DataContractSerializer sia XmlSerializer sono supportate), come illustrato negli esempi seguenti.One way to create complex element extensions that consist of many nested elements is to use the .NET Framework APIs for serialization (both the DataContractSerializer and the XmlSerializer are supported) as shown in the following examples.

feed.ElementExtensions.Add( new DataContractExtension() { Key = "X", Value = 4 } );  
feed.ElementExtensions.Add( new XmlSerializerExtension { Key = "Y", Value = 8 }, new XmlSerializer( typeof( XmlSerializerExtension ) ) );  

In questo esempio, DataContractExtension e XmlSerializerExtension sono tipi personalizzati scritti per l'utilizzo con un serializzatore.In this example, the DataContractExtension and XmlSerializerExtension are custom types written for use with a serializer.

La classe SyndicationElementExtensionCollection può essere utilizzata anche per creare estensioni dell'elemento da un'istanza XmlReader.The SyndicationElementExtensionCollection class can also be used to create element extensions from an XmlReader instance. Ciò consente una facile integrazione con l'elaborazione API XML ad esempio XElement come mostra il codice di esempio seguente.This allows for easy integration with XML processing APIs such as XElement as shown in the following sample code.

feed.ElementExtensions.Add(new XElement("xElementExtension",  
        new XElement("Key", new XAttribute("attr1", "someValue"), "Z"),  
        new XElement("Value", new XAttribute("attr1", "someValue"),   
        "15")).CreateReader());  

Lettura dati dell'estensioneReading Extension Data

I valori per le estensioni dell'attributo possono essere ottenuti cercando l'attributo nella raccolta AttributeExtensions tramite la classe XmlQualifiedName come mostra il codice di esempio seguente.The values for attribute extensions can be obtained by looking up the attribute in the AttributeExtensions collection by its XmlQualifiedName as shown in the following sample code.

Console.WriteLine( feed.AttributeExtensions[ new XmlQualifiedName( "myAttribute", "" )]);  

L'accesso alle estensioni dell'elemento viene effettuato utilizzando il metodo ReadElementExtensions<T>.Element extensions are accessed using the ReadElementExtensions<T> method.

foreach( string s in feed2.ElementExtensions.ReadElementExtensions<string>("simpleString", ""))  
{  
    Console.WriteLine(s);  
}  

foreach (DataContractExtension dce in feed2.ElementExtensions.ReadElementExtensions<DataContractExtension>("DataContractExtension",  
"http://schemas.datacontract.org/2004/07/SyndicationExtensions"))  
{  
    Console.WriteLine(dce.ToString());  
}  

foreach (XmlSerializerExtension xse in feed2.ElementExtensions.ReadElementExtensions<XmlSerializerExtension>("XmlSerializerExtension", "", new XmlSerializer(typeof(XmlSerializerExtension))))  
{  
    Console.WriteLine(xse.ToString());  
}  

È anche possibile ottenere un XmlReader per estensioni dell'elemento singole utilizzando il metodo GetReader().It is also possible to obtain an XmlReader at individual element extensions by using the GetReader() method.

foreach (SyndicationElementExtension extension in feed2.ElementExtensions.Where<SyndicationElementExtension>(x => x.OuterName == "xElementExtension"))  
{  
    XNode xelement = XElement.ReadFrom(extension.GetReader());  
    Console.WriteLine(xelement.ToString());  
}  

Per impostare, compilare ed eseguire l'esempioTo set up, build, and run the sample

  1. Assicurarsi di avere eseguito la procedura di installazione singola per gli esempi di Windows Communication Foundation.Ensure that you have performed the One-Time Setup Procedure for the Windows Communication Foundation Samples.

  2. Per compilare l'edizione in C# o Visual Basic .NET della soluzione, seguire le istruzioni in Building the Windows Communication Foundation Samples.To build the C# or Visual Basic .NET edition of the solution, follow the instructions in Building the Windows Communication Foundation Samples.

  3. Per eseguire l'esempio in una configurazione singola o tra computer, seguire le istruzioni in esegue gli esempi di Windows Communication Foundation.To run the sample in a single- or cross-machine configuration, follow the instructions in Running the Windows Communication Foundation Samples.

Importante

È possibile che gli esempi siano già installati nel computer.The samples may already be installed on your machine. Verificare la directory seguente (impostazione predefinita) prima di continuare.Check for the following (default) directory before continuing.

<InstallDrive>:\WF_WCF_Samples

Se questa directory non esiste, andare al Windows Communication Foundation (WCF) e gli esempi di Windows Workflow Foundation (WF) per .NET Framework 4 per scaricare tutti i Windows Communication Foundation (WCF) e WFWF esempi.If this directory does not exist, go to Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4 to download all Windows Communication Foundation (WCF) and WFWF samples. Questo esempio si trova nella directory seguente.This sample is located in the following directory.

<InstallDrive>:\WF_WCF_Samples\WCF\Basic\Syndication\LooselyTypedExtensions

Vedere ancheSee Also

Estensioni fortemente tipizzateStrongly-Typed Extensions
Diffusione WCFWCF Syndication