Ten artykuł został przetłumaczony przez maszynę. Aby wyświetlić jego treść w języku angielskim, zaznacz pole wyboru Angielski. Możesz też wyświetlić angielski tekst w okienku wyskakującym, przesuwając wskaźnik myszy nad konkretny tekst”.
Tłumaczenie
Angielski

Klasa DataContractSerializer

.NET Framework (current version)
 

Data opublikowania: październik 2016

Serializuje i deserializuje wystąpienia typu w strumieniu XML lub dokumentu za pomocą kontraktu danych. Ta klasa nie może być dziedziczona.

Przestrzeń nazw:   System.Runtime.Serialization
Zestaw:  System.Runtime.Serialization (w System.Runtime.Serialization.dll)

System.Object
  System.Runtime.Serialization.XmlObjectSerializer
    System.Runtime.Serialization.DataContractSerializer

public sealed class DataContractSerializer : XmlObjectSerializer

NazwaOpis
System_CAPS_pubmethodDataContractSerializer(Type)

Inicjuje nowe wystąpienie DataContractSerializer klasy do serializacji lub deserializacji obiektu określonego typu.

System_CAPS_pubmethodDataContractSerializer(Type, DataContractSerializerSettings)

Inicjuje nowe wystąpienie DataContractSerializer klasy do serializacji lub deserializacji obiektu określonego typu i ustawień.

System_CAPS_pubmethodDataContractSerializer(Type, IEnumerable<Type>)

Inicjuje nowe wystąpienie DataContractSerializer klasy do serializacji lub deserializacji obiektu określonego typu i kolekcji znanych typów, które mogą być obecne na wykresie obiektu.

System_CAPS_pubmethodDataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)

Inicjuje nowe wystąpienie DataContractSerializer klasy do serializacji lub deserializacji obiektu określonego typu. Ta metoda również określa listę znanych typów, które mogą być obecne na wykresie obiektu maksymalną liczbę elementów wykresu do serializacji, parametry, aby zignorować nieoczekiwane dane, czy używać niestandardowych XML tworzy w celu zachowania danych odwołanie do obiektu wykresu i zastępczego dla niestandardowej serializacji.

System_CAPS_pubmethodDataContractSerializer(Type, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)

Inicjuje nowe wystąpienie DataContractSerializer klasy do serializacji lub deserializacji obiektu określonego typu. Ta metoda również określa listę znanych typów, które mogą być obecne na wykresie obiektu maksymalną liczbę elementów wykresu do serializacji, parametry, aby zignorować nieoczekiwane dane, czy użyć niestandardowych XML konstrukcji, aby zachować dane odwołanie do obiektu wykresu, zastępczego dla niestandardowej serializacji i alternatywę dla mapowania xsi:type deklaracje w czasie wykonywania.

System_CAPS_pubmethodDataContractSerializer(Type, String, String)

Inicjuje nowe wystąpienie DataContractSerializer klasy do serializacji lub deserializacji obiektu określonego typu przy użyciu dostarczonego elementu głównego XML i przestrzeni nazw.

System_CAPS_pubmethodDataContractSerializer(Type, String, String, IEnumerable<Type>)

Inicjuje nowe wystąpienie DataContractSerializer klasy do serializacji lub deserializacji obiektu określonego typu. Ta metoda również określa element główny XML i przestrzeni nazw w dwoma parametrami, a także listę znanych typów, które mogą być obecne na wykresie obiektu.

System_CAPS_pubmethodDataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)

Inicjuje nowe wystąpienie DataContractSerializer klasy do serializacji lub deserializacji obiektu określonego typu. Ta metoda również określa listę znanych typów, które mogą być obecne na wykresie obiektu maksymalną liczbę elementów wykresu do serializacji, parametry, aby zignorować nieoczekiwane dane, czy używać niestandardowych XML tworzy Aby zachować dane odwołanie do obiektu w wykresie, zastępczego dla niestandardowej serializacji i — element XML i przestrzeń nazw zawierających zawartość.

System_CAPS_pubmethodDataContractSerializer(Type, String, String, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)

Inicjuje nowe wystąpienie DataContractSerializer klasy do serializacji lub deserializacji obiektu określonego typu. Ta metoda również określa listę znanych typów, które mogą być obecne na wykresie obiektu maksymalną liczbę elementów wykresu do serializacji, parametry, aby zignorować nieoczekiwane dane, czy użyć niestandardowych XML tworzy w celu zachowania danych referencyjnych obiektu w wykresie, Surogat niestandardowej serializacji, elementu XML i obszaru nazw, który zawiera zawartość i alternatywę dla mapowania xsi:type deklaracje w czasie wykonywania.

System_CAPS_pubmethodDataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString)

Inicjuje nowe wystąpienie DataContractSerializer klasy do serializacji lub deserializacji obiektu określonego typu przy użyciu elementu głównego XML i przestrzeń nazw określone za pomocą parametrów typu XmlDictionaryString.

System_CAPS_pubmethodDataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>)

Inicjuje nowe wystąpienie DataContractSerializer klasy do serializacji lub deserializacji obiektu określonego typu. Ta metoda również określa element główny XML i przestrzeni nazw w dwóch XmlDictionaryString Parametry, a także listę znanych typów, które mogą być obecne na wykresie obiektu.

System_CAPS_pubmethodDataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate)

Inicjuje nowe wystąpienie DataContractSerializer klasy do serializacji lub deserializacji obiektu określonego typu. Ta metoda również określa listę znanych typów, które mogą być obecne na wykresie obiektu maksymalną liczbę elementów wykresu do serializacji, parametry, aby zignorować nieoczekiwane dane, czy użyć niestandardowych XML konstrukcji, aby zachować dane odwołanie do obiektu w wykresie, zastępczego dla niestandardowej serializacji i parametry XmlDictionaryString określające — element XML i obszaru nazw, który z zawartością.

System_CAPS_pubmethodDataContractSerializer(Type, XmlDictionaryString, XmlDictionaryString, IEnumerable<Type>, Int32, Boolean, Boolean, IDataContractSurrogate, DataContractResolver)

Inicjuje nowe wystąpienie DataContractSerializer klasy do serializacji lub deserializacji obiektu określonego typu. Ta metoda również określa listę znanych typów, które mogą być obecne na wykresie obiektu maksymalną liczbę elementów wykresu do serializacji, parametry, aby zignorować nieoczekiwane dane, czy użyć niestandardowych XML tworzy w celu zachowania danych referencyjnych obiektu na wykresie zastępczego dla niestandardowej serializacji, parametry XmlDictionaryString określające — element XML i przestrzeni nazw z zawartością , a alternatywę dla mapowania xsi:type deklaracje w czasie wykonywania.

NazwaOpis
System_CAPS_pubpropertyDataContractResolver

Pobiera składnika służy do mapowania dynamicznie xsi:type deklaracje typów znany kontraktu.

System_CAPS_pubpropertyDataContractSurrogate

Pobiera typ znaków, które mogą rozszerzyć procesu serializacji lub deserializacji.

System_CAPS_pubpropertyIgnoreExtensionDataObject

Pobiera wartość, która określa, czy należy zignorować danych dostarczanych przez rozszerzenie klasy, gdy klasa jest serializacji lub deserializacji.

System_CAPS_pubpropertyKnownTypes

Pobiera kolekcję typów, które mogą być obecne na wykresie obiektu serializacji przy użyciu tego wystąpienia DataContractSerializer.

System_CAPS_pubpropertyMaxItemsInObjectGraph

Pobiera maksymalną liczbę elementów do serializacji lub deserializacji wykresu obiektów.

System_CAPS_pubpropertyPreserveObjectReferences

Pobiera wartość, która określa, czy użyć niestandardowych XML tworzy w celu zachowania danych referencyjnych obiektu.

System_CAPS_pubpropertySerializeReadOnlyTypes

Pobiera wartość, która określa, czy typy tylko do odczytu są serializacji.

NazwaOpis
System_CAPS_pubmethodEquals(Object)

Sprawdza, czy podany obiekt jest równy aktualnemu obiektowi (Dziedziczone z Object).

System_CAPS_pubmethodGetHashCode()

Służy jako domyślna funkcji mieszania.(Dziedziczone z Object).

System_CAPS_pubmethodGetType()

Pobiera Type bieżącego wystąpienia.(Dziedziczone z Object).

System_CAPS_pubmethodIsStartObject(XmlDictionaryReader)

Określa, czy XmlDictionaryReader jest umieszczony na obiekcie, który może zostać przeprowadzona.(Przesłania XmlObjectSerializer.IsStartObject(XmlDictionaryReader)).

System_CAPS_pubmethodIsStartObject(XmlReader)

Określa, czy XmlReader jest umieszczony na obiekcie, który może zostać przeprowadzona.(Przesłania XmlObjectSerializer.IsStartObject(XmlReader)).

System_CAPS_pubmethodReadObject(Stream)

Odczytuje strumień XML lub dokumentu z Stream i zwraca obiekt po deserializacji.(Dziedziczone z XmlObjectSerializer).

System_CAPS_pubmethodReadObject(XmlDictionaryReader)

Odczytuje dokumentu XML lub strumienia z XmlDictionaryReader i zwraca obiekt po deserializacji.(Dziedziczone z XmlObjectSerializer).

System_CAPS_pubmethodReadObject(XmlDictionaryReader, Boolean)

Odczytuje strumień XML z XmlDictionaryReader i zwraca obiekt po deserializacji oraz określa, czy dokonuje zweryfikować nazwy obiektu przed odczytaniem jego wartość.(Przesłania XmlObjectSerializer.ReadObject(XmlDictionaryReader, Boolean)).

System_CAPS_pubmethodReadObject(XmlDictionaryReader, Boolean, DataContractResolver)

Odczytuje dokumentu XML lub strumienia dokumentu i zwraca obiekt po deserializacji. Metoda zawiera parametr do określenia, czy nazwa obiektu jest weryfikowany sprawdzania poprawności i rozpoznawania nazw dla mapowania xsi:type deklaracje w czasie wykonywania.

System_CAPS_pubmethodReadObject(XmlReader)

Odczytuje strumień XML z XmlReader i zwraca obiekt po deserializacji.(Przesłania XmlObjectSerializer.ReadObject(XmlReader)).

System_CAPS_pubmethodReadObject(XmlReader, Boolean)

Odczytuje strumień XML z XmlReader i zwraca obiekt po deserializacji oraz określa, czy dokonuje zweryfikować nazwy obiektu przed odczytaniem jego wartość.(Przesłania XmlObjectSerializer.ReadObject(XmlReader, Boolean)).

System_CAPS_pubmethodToString()

Zwraca łańcuch znaków, reprezentujący aktualny obiekt. (Dziedziczone z Object).

System_CAPS_pubmethodWriteEndObject(XmlDictionaryWriter)

Zapisuje zamykającego elementu XML za pomocą XmlDictionaryWriter.(Przesłania XmlObjectSerializer.WriteEndObject(XmlDictionaryWriter)).

System_CAPS_pubmethodWriteEndObject(XmlWriter)

Zapisuje zamykającego elementu XML za pomocą XmlWriter.(Przesłania XmlObjectSerializer.WriteEndObject(XmlWriter)).

System_CAPS_pubmethodWriteObject(Stream, Object)

Zapisuje kompletną zawartością (uruchamianie, zawartość i końcowych) obiektu dokumentu XML lub strumieni z określonym Stream.(Dziedziczone z XmlObjectSerializer).

System_CAPS_pubmethodWriteObject(XmlDictionaryWriter, Object)

Zapisuje kompletną zawartością (uruchamianie, zawartość i końcowych) obiektu dokumentu XML lub strumieni z określonym XmlDictionaryWriter.(Dziedziczone z XmlObjectSerializer).

System_CAPS_pubmethodWriteObject(XmlDictionaryWriter, Object, DataContractResolver)

Zapisuje wszystkie dane obiektu (początkowy elementu XML, zawartość i otaczającego element) do dokumentu XML lub przy użyciu określonego obiektu XmlDictionaryWriter strumienia. Metoda obejmuje rozpoznawania nazw dla mapowania xsi:type deklaracje w czasie wykonywania.

System_CAPS_pubmethodWriteObject(XmlWriter, Object)

Zapisuje dane obiektu (rozpoczyna się element XML, zawartość i element zamykający) do dokumentu XML lub strumienia z XmlWriter.(Przesłania XmlObjectSerializer.WriteObject(XmlWriter, Object)).

System_CAPS_pubmethodWriteObjectContent(XmlDictionaryWriter, Object)
System_CAPS_pubmethodWriteObjectContent(XmlWriter, Object)

Zapisuje XML zawartości przy użyciu XmlWriter.(Przesłania XmlObjectSerializer.WriteObjectContent(XmlWriter, Object)).

System_CAPS_pubmethodWriteStartObject(XmlDictionaryWriter, Object)

Zapisuje otwarcia elementu XML za pomocą XmlDictionaryWriter.(Przesłania XmlObjectSerializer.WriteStartObject(XmlDictionaryWriter, Object)).

System_CAPS_pubmethodWriteStartObject(XmlWriter, Object)

Zapisuje otwarcia elementu XML za pomocą XmlWriter.(Przesłania XmlObjectSerializer.WriteStartObject(XmlWriter, Object)).

Użyj DataContractSerializer klasy do serializacji i deserializacji wystąpień tego typu w strumieniu XML lub dokumentu. Na przykład można utworzyć typ o nazwie Person z właściwościami, które zawierają niezbędne dane, takie jak nazwa i adres. Można tworzyć i manipulować wystąpienie Person klasy a zapisu wszystkich wartości jego właściwości w dokumencie XML nowsze pobierania lub w strumieniu XML do bezpośredniego transportu. Najważniejszą DataContractSerializer służy do serializacji i deserializacji danych przesyłanych w Windows Communication Foundation (WCF) wiadomości. Zastosuj DataContractAttribute atrybutu do klasy, a DataMemberAttribute atrybutu do elementów członkowskich klasy, aby określić właściwości i pola, które są serializowane.

Lista: typy, które można serializować, zobacz Typy obsługiwane przez serializator kontraktu danych.

Aby użyć DataContractSerializer, najpierw utworzyć wystąpienie klasy i obiekt odpowiednie do zapisu lub odczytu format; na przykład wystąpienie XmlDictionaryWriter. Następnie wywołaj WriteObject metodę, aby zachować dane. Aby pobrać dane, utworzyć obiekt odpowiednie do odczytywania formatu danych (takich jak XmlDictionaryReader dokumentu XML) i wywołać ReadObject metody.

Aby uzyskać więcej informacji dotyczących przy użyciu DataContractSerializer, zobacz Serializacja i deserializacja.

Można ustawić typu serializator kontraktu danych przy użyciu < dataContractSerializer > elementu w pliku konfiguracji aplikacji klienta.

DataContractSerializer Jest używany w połączeniu z DataContractAttribute i DataMemberAttribute klasy. Aby przygotować klasę do serializacji, zastosuj DataContractAttribute do klasy. Dla każdego członka klasy, która zwraca dane przeznaczone do serializacji, zastosuj DataMemberAttribute. Można serializować pola i właściwości, niezależnie od dostępności: prywatnych, chronionych, wewnętrznych chronione wewnętrznego lub publicznego.

Na przykład schemat określa Customer z ID Właściwości, ale jeszcze istniejącej aplikacji korzystającej z typu o nazwie Person z Name Właściwości. Aby utworzyć typ, który jest zgodny z umową, należy najpierw zastosować DataContractAttribute do klasy. Następnie Zastosuj DataMemberAttribute do każdego pola lub właściwości przewidzianej do serializacji.

System_CAPS_noteUwaga

Można stosować DataMemberAttribute do elementów członkowskich prywatnej i publicznej.

Ostateczny format XML nie musi być tekstu. Zamiast tego DataContractSerializer zapisuje dane jako jedno odniesienie XML, dzięki czemu można zapisać danych w dowolnym formacie rozpoznawanym przez XmlReader i XmlWriter. Zalecane jest używanie XmlDictionaryReader i XmlDictionaryWriter klasy do odczytu i zapisu, ponieważ oba są zoptymalizowane do pracy z DataContractSerializer.

Jeśli tworzysz klasy, która ma pola lub właściwości, które muszą być wypełnione przed serializacji lub deserializacji wystąpi, użyj atrybutów wywołania zwrotnego, zgodnie z opisem w Wywołania zwrotne serializacji z tolerancją dla wersji.

Podczas serializacji lub deserializacji obiektu, jest wymagane czy typ jest "znany" DataContractSerializer. Rozpocznij od tworzenia wystąpienia klasy, która implementuje interfejs IEnumerable<T> (takie jak List<T>) i dodawanie do kolekcji znanych typów. Następnie utwórz wystąpienie DataContractSerializer przy użyciu jednego z przeciążeń, które przyjmuje IEnumerable<T> (na przykład DataContractSerializer(Type, IEnumerable<Type>).

System_CAPS_noteUwaga

W odróżnieniu od innych typów pierwotnych DateTimeOffset Struktura nie jest znanym typem domyślnie, więc należy ręcznie dodać do listy znanych typów (zobacz Znane typy kontraktów danych).

DataContractSerializer Rozumie kontraktów danych, które zostały zaprojektowane, aby był zgodny z przyszłych wersji zamówienia. Takie typy implementować IExtensibleDataObject interfejsu. Funkcje interfejsu ExtensionData właściwość, która zwraca ExtensionDataObject obiektu.Aby uzyskać więcej informacji, zobaczKontrakty danych zgodne z nowszymi wersjami.

Podczas tworzenia wystąpienia obiektu docelowego podczas deserializacji DataContractSerializer nie wywołuje konstruktora obiektu docelowego. Przy tworzeniu [DataContract] typ, który jest dostępny z częściowym zaufaniem (czyli jest publiczny i w zestawie, który ma AllowPartiallyTrustedCallers zastosowano atrybut) i które wykonuje określone akcje związane z zabezpieczeniami, należy pamiętać, że Konstruktor nie jest wywoływana. W szczególności następujące techniki nie działają:

  • Jeśli spróbujesz ograniczyć dostęp częściowej relacji zaufania, wprowadzając konstruktora wewnętrznego lub prywatnego lub przez dodanie LinkDemand do konstruktora--oba te zostały uwzględnione podczas deserializacji w częściowej relacji zaufania.

  • Jeśli kod klasy, który zakłada, że Konstruktor zostało uruchomione, klasa może wystąpić w nieprawidłowy stan wewnętrzny, który jest możliwe.

Poniższy przykład kodu pokazuje typu o nazwie Person który jest serializowana przez DataContractSerializer. DataContractAttribute Jest stosowany do klasy, a DataMemberAttribute jest stosowany do elementów członkowskich w celu poinstruowania DataContractSerializer co do serializacji.

namespace DataContractSerializerExample
{
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Runtime.Serialization;
    using System.Xml;

    // You must apply a DataContractAttribute or SerializableAttribute
    // to a class to have it serialized by the DataContractSerializer.
    [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("DataContractSerializerExample.xml");
                ReadObject("DataContractSerializerExample.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 writer = new FileStream(fileName, FileMode.Create);
            DataContractSerializer ser =
                new DataContractSerializer(typeof(Person));
            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());
            DataContractSerializer ser = new DataContractSerializer(typeof(Person));

            // Deserialize the data and read it from the instance.
            Person deserializedPerson =
                (Person)ser.ReadObject(reader, true);
            reader.Close();
            fs.Close();
            Console.WriteLine(String.Format("{0} {1}, ID: {2}",
            deserializedPerson.FirstName, deserializedPerson.LastName,
            deserializedPerson.ID));
        }
    }

Platforma uniwersalna systemu Windows
Dostępne od 8
.NET Framework
Dostępne od 3.0
Biblioteka klas przenośnych
Obsługiwane w: przenośne platformy .NET
Silverlight
Dostępne od 2.0
Windows Phone Silverlight
Dostępne od 7.0
Windows Phone
Dostępne od 8.1

Wystąpienia tej klasy są wielowątkowość, z wyjątkiem sytuacji, gdy wystąpienie jest używany z implementacją IDataContractSurrogate lub DataContractResolver.

Powrót do początku
Pokaż: