Esporta (0) Stampa
Espandi tutto

Classe XmlObjectSerializer

Aggiornamento: novembre 2007

Fornisce la classe di base utilizzata per serializzare oggetti come flussi o documenti XML. Questa classe è astratta.

Spazio dei nomi:  System.Runtime.Serialization
Assembly:  System.Runtime.Serialization (in System.Runtime.Serialization.dll)

public abstract class XmlObjectSerializer
public abstract class XmlObjectSerializer
public abstract class XmlObjectSerializer

EccezioneCondizione
InvalidDataContractException

il tipo serializzato non è conforme alle regole del contratto dati. Ad esempio, l'attributo DataContractAttribute non è stato applicato al tipo.

SerializationException

problema con l'istanza da serializzare.

Estendere la classe XmlObjectSerializer per creare un serializzatore personalizzato con cui serializzare e deserializzare oggetti. La classe DataContractSerializer e la classe NetDataContractSerializer ereditano entrambe dalla classe XmlObjectSerializer e vengono utilizzate per serializzare e deserializzare oggetti conformi a regole di contratti dati (oggetti creati utilizzando le classi DataContractAttribute e DataMemberAttribute).

Note per gli eredi:

Quando si eredita da XmlObjectSerializer, è necessario eseguire l'override dei membri seguenti: XmlObjectSerializer.WriteStartObject(XmlDictionaryWriter, Object), XmlObjectSerializer.WriteObjectContent(XmlDictionaryWriter, Object), XmlObjectSerializer.WriteEndObject(XmlDictionaryWriter). È inoltre necessario implementare i metodi IsStartObject e ReadObject per le operazioni di lettura e deserializzazione.

Nell'esempio seguente viene illustrato un metodo denominato WriteObjectWithInstance che include una classe XmlObjectSerializer come parametro. Il metodo serializza un oggetto utilizzando DataContractSerializer o NetDataContractSerializer mediante una chiamata al metodo WriteObject.

public class Test
{
    private void WriteObjectWithInstance(XmlObjectSerializer xm, Company graph,
       string fileName)
    {
        // Use either the XmlDataContractSerializer or NetDataContractSerializer,
        // or any other class that inherits from XmlObjectSerializer to write with.
        Console.WriteLine(xm.GetType());
        FileStream fs = new FileStream(fileName, FileMode.Create);
        XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(fs);
        xm.WriteObject(writer, graph);
        Console.WriteLine("Done writing {0}", fileName);
    }

    private void Run()
    {
        // Create the object to write to a file.
        Company graph = new Company();
        graph.Name = "cohowinery.com";

        // Create a DataContractSerializer and a NetDataContractSerializer.
        // Pass either one to the WriteObjectWithInstance method.
        DataContractSerializer dcs = new DataContractSerializer(typeof(Company));
        NetDataContractSerializer ndcs = new NetDataContractSerializer();
        WriteObjectWithInstance(dcs, graph, @"datacontract.xml");
        WriteObjectWithInstance(ndcs, graph, @"netDatacontract.xml");
    }

    [DataContract]
    public class Company
    {
        [DataMember]
        public string Name;
    }

    static void Main()
    {
        try
        {
            Console.WriteLine("Starting");
            Test t = new Test();
            t.Run();
            Console.WriteLine("Done");
            Console.ReadLine();
        }

        catch (InvalidDataContractException iExc)
        {
            Console.WriteLine("You have an invalid data contract: ");
            Console.WriteLine(iExc.Message);
            Console.ReadLine();
        }

        catch (SerializationException serExc)
        {
            Console.WriteLine("There is a problem with the instance:");
            Console.WriteLine(serExc.Message);
            Console.ReadLine();
        }

        catch (QuotaExceededException qExc)
        {
            Console.WriteLine("The quota has been exceeded");
            Console.WriteLine(qExc.Message);
            Console.ReadLine();
        }
        catch (Exception exc)
        {
            Console.WriteLine(exc.Message);
            Console.WriteLine(exc.ToString());
            Console.ReadLine();
        }
    }


Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.

Windows Vista, Windows XP SP2, Windows Server 2003, Windows CE, Windows Mobile per Smartphone, Windows Mobile per Pocket PC

.NET Framework e .NET Compact Framework non supportano tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

.NET Framework

Supportato in: 3.5, 3.0

.NET Compact Framework

Supportato in: 3.5

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft