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
iset
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 lubset
i właściwości z metodami wewnętrznymi lub prywatnymiset
lubget
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
,XmlInclude
i 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.