NetDataContractSerializer Classe

Définition

Sérialise et désérialise une instance d’un type dans un flux ou un document XML à l’aide des types .NET Framework fournis. Cette classe ne peut pas être héritée.

public ref class NetDataContractSerializer sealed : System::Runtime::Serialization::XmlObjectSerializer, System::Runtime::Serialization::IFormatter
public sealed class NetDataContractSerializer : System.Runtime.Serialization.XmlObjectSerializer, System.Runtime.Serialization.IFormatter
type NetDataContractSerializer = class
    inherit XmlObjectSerializer
    interface IFormatter
Public NotInheritable Class NetDataContractSerializer
Inherits XmlObjectSerializer
Implements IFormatter
Héritage
NetDataContractSerializer
Implémente

Exemples

L'exemple de code suivant affiche un type nommé Person qui est sérialisé par le NetDataContractSerializer. L'attribut DataContractAttribute est appliqué à la classe, et DataMemberAttribute est appliqué aux membres (y compris un membre privé) pour indiquer au NetDataContractSerializer l'élément à sérialiser.

// You must apply a DataContractAttribute or SerializableAttribute
// to a class to have it serialized by the NetDataContractSerializer.
[DataContract(Name = "Customer", Namespace = "http://www.contoso.com")]
class Person : IExtensibleDataObject
{
    [DataMember()]
    public string FirstName;
    [DataMember]
    public string LastName;
    [DataMember()]
    public int ID;

    public Person(string newfName, string newLName, int newID)
    {
        FirstName = newfName;
        LastName = newLName;
        ID = newID;
    }

    private ExtensionDataObject extensionData_Value;

    public ExtensionDataObject ExtensionData
    {
        get
        {
            return extensionData_Value;
        }
        set
        {
            extensionData_Value = value;
        }
    }
}

public sealed class Test
{
    private Test() { }

    public static void Main()
    {
        try
        {
            WriteObject("NetDataContractSerializerExample.xml");
            ReadObject("NetDataContractSerializerExample.xml");
        }

        catch (SerializationException serExc)
        {
            Console.WriteLine("Serialization Failed");
            Console.WriteLine(serExc.Message);
        }
        catch (Exception exc)
        {
            Console.WriteLine(
            "The serialization operation failed: {0} StackTrace: {1}",
            exc.Message, exc.StackTrace);
        }

        finally
        {
            Console.WriteLine("Press <Enter> to exit....");
            Console.ReadLine();
        }
    }

    public static void WriteObject(string fileName)
    {
        Console.WriteLine(
            "Creating a Person object and serializing it.");
        Person p1 = new Person("Zighetti", "Barbara", 101);
        FileStream fs = new FileStream(fileName, FileMode.Create);
        XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(fs);
        NetDataContractSerializer ser =
            new NetDataContractSerializer();
        ser.WriteObject(writer, p1);
        writer.Close();
    }

    public static void ReadObject(string fileName)
    {
        Console.WriteLine("Deserializing an instance of the object.");
        FileStream fs = new FileStream(fileName,
        FileMode.Open);
        XmlDictionaryReader reader =
            XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());
        NetDataContractSerializer ser = new NetDataContractSerializer();

        // Deserialize the data and read it from the instance.
        Person deserializedPerson =
            (Person)ser.ReadObject(reader, true);
        fs.Close();
        Console.WriteLine(String.Format("{0} {1}, ID: {2}",
        deserializedPerson.FirstName, deserializedPerson.LastName,
        deserializedPerson.ID));
    }
}
' You must apply a DataContractAttribute or SerializableAttribute
' to a class to have it serialized by the NetDataContractSerializer.
<DataContract(Name := "Customer", [Namespace] := "http://www.contoso.com")>  _
Class Person
    Implements IExtensibleDataObject
    <DataMember()>  _
    Public FirstName As String
    <DataMember()>  _
    Public LastName As String
    <DataMember()>  _
    Public ID As Integer
    
    
    Public Sub New(ByVal newfName As String, ByVal newLName As String, _
       ByVal newID As Integer) 
        FirstName = newfName
        LastName = newLName
        ID = newID
    
    End Sub 
    
    Private extensionData_Value As ExtensionDataObject
    
    
    Public Property ExtensionData() As ExtensionDataObject _
     Implements IExtensibleDataObject.ExtensionData
        Get
            Return extensionData_Value
        End Get
        Set
            extensionData_Value = value
        End Set
    End Property
End Class 


NotInheritable Public Class Test

    Private Sub New() 
    
    End Sub
     
    Public Shared Sub Main() 
        Try
            WriteObject("NetDataContractSerializerExample.xml")
            ReadObject("NetDataContractSerializerExample.xml")
        
        Catch serExc As SerializationException
            Console.WriteLine("Serialization Failed")
            Console.WriteLine(serExc.Message)
        Catch exc As Exception
            Console.WriteLine("The serialization operation failed: {0} StackTrace: {1}", exc.Message, exc.StackTrace)
        
        Finally
            Console.WriteLine("Press <Enter> to exit....")
            Console.ReadLine()
        End Try
    
    End Sub 
    
    
    Public Shared Sub WriteObject(ByVal fileName As String) 
        Console.WriteLine("Creating a Person object and serializing it.")
        Dim p1 As New Person("Zighetti", "Barbara", 101)
        Dim fs As New FileStream(fileName, FileMode.Create)
        Dim writer As XmlDictionaryWriter = XmlDictionaryWriter.CreateTextWriter(fs)
        Dim ser As New System.Runtime.Serialization.NetDataContractSerializer()

        ser.WriteObject(writer, p1)
        writer.Close()
    
    End Sub     

    Public Shared Sub ReadObject(ByVal fileName As String) 
        Console.WriteLine("Deserializing an instance of the object.")
        Dim fs As New FileStream(fileName, FileMode.Open)
        Dim reader As XmlDictionaryReader = _
           XmlDictionaryReader.CreateTextReader(fs, New XmlDictionaryReaderQuotas())
        Dim ser As New System.Runtime.Serialization.NetDataContractSerializer()
        
        ' Deserialize the data and read it from the instance.
        Dim deserializedPerson As Person = CType(ser.ReadObject(reader, True), Person)
        fs.Close()
        Console.WriteLine(String.Format("{0} {1}, ID: {2}", deserializedPerson.FirstName, deserializedPerson.LastName, deserializedPerson.ID))
    
    End Sub 
End Class

Remarques

Sécurité

NetDataContractSerializer est non sécurisé. Pour plus d’informations, consultez le guide de sécurité BinaryFormatter.

Le NetDataContractSerializer diffère du DataContractSerializer sur un point important : le NetDataContractSerializer inclut des informations de type CLR dans le XML sérialisé ; le DataContractSerializer ne le fait pas. Par conséquent, le NetDataContractSerializer peut être utilisé uniquement si les extrémités de sérialisation et de désérialisation partagent toutes deux les mêmes types CLR.

Le sérialiseur peut sérialiser des types auxquels l'attribut DataContractAttribute ou SerializableAttribute a été appliqué. Il sérialise également des types qui implémentent ISerializable.

Pour plus d’informations sur la sérialisation, consultez Sérialisation et Désérialisation.

Incompatibilité avec XElement

La classe XElement est utilisée pour écrire du XML. Toutefois, le NetDataContractSerializer ne peut pas sérialiser une instance du type. Le code suivant échoue par conséquent avec l’exception : « Type racine « System.Xml. Linq.XElement' n’est pas pris en charge au niveau supérieur par NetDataContractSerializer, car il est IXmlSerializable avec IsAny=true et doit écrire tout son contenu incluant l’élément racine. »

FileStream fs = new FileStream("mystuff.xml", FileMode.Create, FileAccess.ReadWrite);
XElement myElement = new XElement("Parent", new XElement("child1", "form"),
    new XElement("child2", "base"),
    new XElement("child3", "formbase")
    );
NetDataContractSerializer dcs = new NetDataContractSerializer();
dcs.WriteObject(fs, myElement);
Dim fs As New FileStream("mystuff.xml", FileMode.Create, FileAccess.ReadWrite)
Dim myElement As New XElement("Parent", New XElement("child1", "form"), _
    New XElement("child2", "base"), _
    New XElement("child3", "formbase") _
    )
Dim ser As New System.Runtime.Serialization. _
  NetDataContractSerializer()
ser.WriteObject(fs, myElement)

Toutefois, si XElement fait office de type de champ ou de propriété d'une classe, les données contenues par le champ ou la propriété sont alors sérialisées. C'est parce qu'en tant que membre d'une classe, les données ne sont pas le niveau supérieur de la classe.

Constructeurs

NetDataContractSerializer()

Initialise une nouvelle instance de la classe NetDataContractSerializer.

NetDataContractSerializer(StreamingContext)

Initialise une nouvelle instance de la classe NetDataContractSerializer avec les données de contexte de diffusion en continu fournies.

NetDataContractSerializer(StreamingContext, Int32, Boolean, FormatterAssemblyStyle, ISurrogateSelector)

Initialise une nouvelle instance de la classe NetDataContractSerializer avec les données de contexte fournies ; de plus, spécifie le nombre maximal d'éléments dans l'objet à sérialiser et les paramètres à spécifier, si les données supplémentaires sont ignorées, la méthode de chargement d'assembly et un sélecteur de substitut.

NetDataContractSerializer(String, String)

Initialise une nouvelle instance de la classe NetDataContractSerializer avec l'élément racine XML et l'espace de noms fourni.

NetDataContractSerializer(String, String, StreamingContext, Int32, Boolean, FormatterAssemblyStyle, ISurrogateSelector)

Initialise une nouvelle instance de la classe NetDataContractSerializer avec les données de contexte, nom racine et espace de noms fournis ; de plus, spécifie le nombre maximal d'éléments dans l'objet à sérialiser et les paramètres à spécifier, si les données supplémentaires sont ignorées, la méthode de chargement d'assembly et un sélecteur de substitut.

NetDataContractSerializer(XmlDictionaryString, XmlDictionaryString)

Initialise une nouvelle instance de la classe NetDataContractSerializer avec les deux paramètres de type XmlDictionaryString qui contiennent l'élément racine et l'espace de noms utilisé pour spécifier le contenu.

NetDataContractSerializer(XmlDictionaryString, XmlDictionaryString, StreamingContext, Int32, Boolean, FormatterAssemblyStyle, ISurrogateSelector)

Initialise une nouvelle instance de la classe NetDataContractSerializer avec les données de contexte, nom racine et espace de noms fournis (sous forme de paramètres XmlDictionaryString) ; de plus, spécifie le nombre maximal d'éléments dans l'objet à sérialiser et les paramètres à spécifier, si les données supplémentaires trouvées sont ignorées, la méthode de chargement d'assembly et un sélecteur de substitut.

Propriétés

AssemblyFormat

Obtient une valeur qui spécifie une méthode de localisation et de chargement des assemblys.

Binder

Obtient ou définit un objet qui contrôle le chargement de classe.

Context

Obtient ou définit l'objet qui active le transfert de données de contexte qui sont utiles à la sérialisation ou désérialisation.

IgnoreExtensionDataObject

Obtient une valeur qui spécifie si les données fournies par une extension de l’objet sont ignorées.

MaxItemsInObjectGraph

Obtient le nombre maximal d'éléments autorisés dans l'objet à sérialiser.

SurrogateSelector

Obtient ou définit un objet qui aide le formateur lors de la sélection d'un substitut pour la sérialisation.

Méthodes

Deserialize(Stream)

Désérialise un document ou un flux XML ou dans un objet.

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
IsStartObject(XmlDictionaryReader)

Détermine si la classe XmlDictionaryReader est positionnée sur un objet pouvant être désérialisé à l'aide du lecteur spécifié.

IsStartObject(XmlReader)

Détermine si la classe XmlReader est positionnée sur un objet pouvant être désérialisé à l'aide du lecteur spécifié.

MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
ReadObject(Stream)

Lit le flux ou le document XML avec un Stream et retourne l'objet désérialisé.

(Hérité de XmlObjectSerializer)
ReadObject(XmlDictionaryReader)

Lit le document ou le flux XML avec un XmlDictionaryReader et retourne l'objet désérialisé.

(Hérité de XmlObjectSerializer)
ReadObject(XmlDictionaryReader, Boolean)

Lit le document ou flux XML avec une classe XmlDictionaryReader et retourne l'objet désérialisé ; vérifie également si les données de l'objet sont conformes au nom et à l'espace de noms utilisés pour créer le sérialiseur.

ReadObject(XmlReader)

Lit le document ou le flux XML avec une classe XmlDictionaryReader et retourne l'objet désérialisé.

ReadObject(XmlReader, Boolean)

Lit le document ou flux XML avec une classe XmlDictionaryReader et retourne l'objet désérialisé ; vérifie également si les données de l'objet sont conformes au nom et à l'espace de noms utilisés pour créer le sérialiseur.

Serialize(Stream, Object)

Sérialise le graphique d'objet spécifié à l'aide du writer XML spécifié.

ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)
WriteEndObject(XmlDictionaryWriter)

Écrit l'élément XML de fermeture à l'aide d'une classe XmlDictionaryWriter.

WriteEndObject(XmlWriter)

Écrit l'élément XML de fermeture à l'aide d'une classe XmlWriter.

WriteObject(Stream, Object)

Écrit le contenu complet (début, contenu et fin) de l'objet dans le flux ou le document XML avec le Stream spécifié.

(Hérité de XmlObjectSerializer)
WriteObject(XmlDictionaryWriter, Object)

Écrit le contenu complet (début, contenu et fin) de l'objet dans le flux ou le document XML avec le XmlDictionaryWriter spécifié.

(Hérité de XmlObjectSerializer)
WriteObject(XmlWriter, Object)

Écrit le contenu complet (début, contenu et fin) de l'objet dans le flux ou le document XML avec le XmlWriter spécifié.

WriteObjectContent(XmlDictionaryWriter, Object)

Écrit le contenu XML à l'aide d'une classe XmlDictionaryWriter.

WriteObjectContent(XmlWriter, Object)

Écrit le contenu XML à l'aide d'une classe XmlWriter.

WriteStartObject(XmlDictionaryWriter, Object)

Écrit l'élément XML d'ouverture à l'aide d'une classe XmlDictionaryWriter.

WriteStartObject(XmlWriter, Object)

Écrit l'élément XML d'ouverture à l'aide d'une classe XmlWriter.

S’applique à

Voir aussi