NetDataContractSerializer Klass

Definition

Serialiserar och deserialiserar en instans av en typ till XML-dataström eller dokument med hjälp av de angivna .NET typerna. Det går inte att ärva den här klassen.

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
Arv
NetDataContractSerializer
Implementeringar

Exempel

Följande exempelkod visar en typ med namnet Person som serialiseras av NetDataContractSerializer. Attributet DataContractAttribute tillämpas på klassen och DataMemberAttribute tillämpas på medlemmar (inklusive en privat medlem) för att instruera vad som NetDataContractSerializer ska serialiseras.

// 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

Kommentarer

Security

NetDataContractSerializer är osäker. Mer information finns i säkerhetsguiden för BinaryFormatter.

Skiljer NetDataContractSerializer sig från på DataContractSerializer ett viktigt sätt: NetDataContractSerializer innehåller CLR-typinformation i serialiserad XML, medan DataContractSerializer inte. Därför NetDataContractSerializer kan endast användas om både serialiserande och deserialiserande ändar delar samma CLR-typer.

Serialiseraren kan serialisera typer som antingen DataContractAttribute attributet eller SerializableAttribute har tillämpats på. Den serialiserar även typer som implementerar ISerializable.

Mer information om serialisering finns i Serialisering och deserialisering.

Inkompatibilitet med XElement

Klassen XElement används för att skriva XML. Det går dock inte att NetDataContractSerializer serialisera en instans av typen. Följande kod misslyckas därför med undantaget: "Rottypen 'System.Xml.Linq.XElement' stöds inte på den översta nivån av NetDataContractSerializer eftersom den är IXmlSerializable med IsAny=true och måste skriva allt dess innehåll inklusive rotelementet."

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)

Men om en XElement används som typ av ett fält eller en egenskap för en klass serialiseras data som ingår i fältet eller egenskapen. Det beror på att data som medlem i en klass inte är den översta nivån i klassen.

Konstruktorer

Name Description
NetDataContractSerializer()

Initierar en ny instans av NetDataContractSerializer klassen.

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

Initierar en ny instans av NetDataContractSerializer klassen med angivna kontextdata. Dessutom anger det maximala antalet objekt i objektet som ska serialiseras och parametrar för att ange om extra data ignoreras, metoden för sammansättningsinläsning och en surrogatväljare.

NetDataContractSerializer(StreamingContext)

Initierar en ny instans av NetDataContractSerializer klassen med angivna strömmande kontextdata.

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

Initierar en ny instans av NetDataContractSerializer klassen med angivna kontextdata och rotnamn och namnområde. Dessutom anger det maximala antalet objekt i objektet som ska serialiseras och parametrar för att ange om extra data ignoreras, metoden för sammansättningsinläsning och en surrogatväljare.

NetDataContractSerializer(String, String)

Initierar en ny instans av NetDataContractSerializer klassen med det angivna XML-rotelementet och namnområdet.

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

Initierar en ny instans av NetDataContractSerializer klassen med angivna kontextdata och rotnamn och namnområde (som XmlDictionaryString parametrar), anger dessutom det maximala antalet objekt i objektet som ska serialiseras och parametrar för att ange om extra data som hittas ignoreras, metoden för inläsning av sammansättning och en surrogatväljare.

NetDataContractSerializer(XmlDictionaryString, XmlDictionaryString)

Initierar en ny instans av NetDataContractSerializer klassen med två parametrar av typen XmlDictionaryString som innehåller rotelementet och namnområdet som används för att ange innehållet.

Egenskaper

Name Description
AssemblyFormat

Hämtar ett värde som anger en metod för att hitta och läsa in sammansättningar.

Binder

Hämtar eller anger ett objekt som styr klassinläsning.

Context

Hämtar eller anger det objekt som möjliggör överföring av kontextdata som är användbara vid serialisering eller deserialisering.

IgnoreExtensionDataObject

Hämtar ett värde som anger om data som tillhandahålls av ett tillägg av objektet ignoreras.

MaxItemsInObjectGraph

Hämtar det maximala antalet objekt som tillåts i objektet som ska serialiseras.

SurrogateSelector

Hämtar eller anger ett objekt som hjälper formateringen när du väljer en surrogat för serialisering.

Metoder

Name Description
Deserialize(Stream)

Deserialiserar ett XML-dokument eller strömmar till ett objekt.

Equals(Object)

Avgör om det angivna objektet är lika med det aktuella objektet.

(Ärvd från Object)
GetHashCode()

Fungerar som standard-hash-funktion.

(Ärvd från Object)
GetType()

Hämtar den aktuella instansen Type .

(Ärvd från Object)
IsStartObject(XmlDictionaryReader)

Avgör om XmlDictionaryReader är placerat på ett objekt som kan deserialiseras med den angivna läsaren.

IsStartObject(XmlReader)

Avgör om XmlReader är placerat på ett objekt som kan deserialiseras med den angivna läsaren.

MemberwiseClone()

Skapar en ytlig kopia av den aktuella Object.

(Ärvd från Object)
ReadObject(Stream)

Läser XML-dataströmmen eller dokumentet med ett Stream och returnerar det deserialiserade objektet.

(Ärvd från XmlObjectSerializer)
ReadObject(XmlDictionaryReader, Boolean)

Läser XML-dataströmmen eller dokumentet med ett XmlDictionaryReader och returnerar det deserialiserade objektet. Kontrollerar även om objektdata överensstämmer med namnet och namnområdet som används för att skapa serialiseraren.

ReadObject(XmlDictionaryReader)

Läser XML-dokumentet eller dataströmmen med ett XmlDictionaryReader och returnerar det deserialiserade objektet.

(Ärvd från XmlObjectSerializer)
ReadObject(XmlReader, Boolean)

Läser XML-dataströmmen eller dokumentet med ett XmlDictionaryReader och returnerar det deserialiserade objektet. Kontrollerar även om objektdata överensstämmer med namnet och namnområdet som används för att skapa serialiseraren.

ReadObject(XmlReader)

Läser XML-dataströmmen eller dokumentet med ett XmlDictionaryReader och returnerar det deserialiserade objektet.

Serialize(Stream, Object)

Serialiserar det angivna objektdiagrammet med den angivna skrivaren.

ToString()

Returnerar en sträng som representerar det aktuella objektet.

(Ärvd från Object)
WriteEndObject(XmlDictionaryWriter)

Skriver det avslutande XML-elementet med hjälp av en XmlDictionaryWriter.

WriteEndObject(XmlWriter)

Skriver det avslutande XML-elementet med hjälp av en XmlWriter.

WriteObject(Stream, Object)

Skriver det fullständiga innehållet (start, innehåll och slut) för objektet till XML-dokumentet eller dataströmmen med angivet Stream.

(Ärvd från XmlObjectSerializer)
WriteObject(XmlDictionaryWriter, Object)

Skriver det fullständiga innehållet (start, innehåll och slut) för objektet till XML-dokumentet eller dataströmmen med angivet XmlDictionaryWriter.

(Ärvd från XmlObjectSerializer)
WriteObject(XmlWriter, Object)

Skriver det fullständiga innehållet (start, innehåll och slut) för objektet till XML-dokumentet eller dataströmmen med angivet XmlWriter.

WriteObjectContent(XmlDictionaryWriter, Object)

Skriver XML-innehållet med hjälp av en XmlDictionaryWriter.

WriteObjectContent(XmlWriter, Object)

Skriver XML-innehållet med hjälp av en XmlWriter.

WriteStartObject(XmlDictionaryWriter, Object)

Skriver det inledande XML-elementet med hjälp av en XmlDictionaryWriter.

WriteStartObject(XmlWriter, Object)

Skriver det inledande XML-elementet med hjälp av en XmlWriter.

Gäller för

Se även