Udostępnij za pośrednictwem


Typy z możliwością serializowania

Domyślnie DataContractSerializer serializuje wszystkie publicznie widoczne typy. Wszystkie publiczne właściwości odczytu/zapisu i pola typu są serializowane.

Domyślne zachowanie można zmienić, stosując DataContractAttribute atrybuty i DataMemberAttribute do typów i elementów członkowskich. Ta funkcja może być przydatna w sytuacjach, w których istnieją typy, które nie znajdują się pod kontrolą i nie można ich modyfikować w celu dodania atrybutów. Rozpoznaje DataContractSerializer takie typy "nieoznaczone".

Wartości domyślne serializacji

Atrybuty i DataMemberAttribute można zastosować DataContractAttribute do jawnego sterowania lub dostosowywania serializacji typów i elementów członkowskich. Ponadto można zastosować te atrybuty do pól prywatnych. Jednak nawet typy, które nie są oznaczone tymi atrybutami, są serializowane i deserializowane. Obowiązują następujące reguły i wyjątki:

  • Wywnioskuje DataContractSerializer kontrakt danych z typów bez atrybutów przy użyciu domyślnych właściwości nowo utworzonych typów.

  • Wszystkie pola publiczne i właściwości z publicznymi get i set metodami są serializowane, chyba że zostanie zastosowana IgnoreDataMemberAttribute atrybut do tego elementu członkowskiego.

  • Semantyka serializacji jest podobna do semantyki XmlSerializer.

  • W typach nieoznakowanych tylko typy publiczne z konstruktorami, które nie mają parametrów, są serializowane. Wyjątek od tej reguły jest ExtensionDataObject używany z interfejsem IExtensibleDataObject .

  • Pola tylko do odczytu, właściwości bez get metody lub set i właściwości z metodami wewnętrznymi lub prywatnymi set lub get nie są serializowane. Takie właściwości są ignorowane i nie jest zgłaszany żaden wyjątek, z wyjątkiem kolekcji tylko do pobrania.

  • XmlSerializer atrybuty (takie jak XmlElement, XmlAttribute, XmlIgnore, XmlIncludei tak dalej) są ignorowane.

  • Jeśli atrybut nie zostanie zastosowany DataContractAttribute do danego typu, serializator ignoruje dowolny element członkowski w tym typie, do którego DataMemberAttribute zastosowano atrybut.

  • Właściwość jest obsługiwana KnownTypes w typach, które nie są oznaczone atrybutem DataContractAttribute . Obejmuje to obsługę atrybutu KnownTypeAttribute dla nieoznakowanych typów.

  • Aby "zrezygnować" z procesu serializacji dla publicznych elementów członkowskich, właściwości lub pól, zastosuj IgnoreDataMemberAttribute atrybut do tego elementu członkowskiego.

Dziedziczenie

Nieoznaczone typy (typy bez atrybutu DataContractAttribute ) mogą dziedziczyć z typów, które mają ten atrybut, jednak odwrotnie jest niedozwolone: typy z atrybutem nie mogą dziedziczyć z nieoznakowanych typów. Ta reguła jest wymuszana głównie w celu zapewnienia zgodności z poprzednimi wersjami kodu napisanego we wcześniejszych wersjach programu .NET Framework.

Zobacz też