Udostępnij za pośrednictwem


System.Runtime.Serialization.DataContractAttribute, klasa

Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.

DataContractAttribute Zastosuj atrybut do typów (klas, struktur lub wyliczenia), które są używane w operacjach serializacji i deserializacji przez program DataContractSerializer. Jeśli wysyłasz lub odbierasz komunikaty przy użyciu infrastruktury programu Windows Communication Foundation (WCF), należy również zastosować DataContractAttribute je do wszystkich klas, które przechowują dane wysyłane w komunikatach i manipulują nimi. Aby uzyskać więcej informacji na temat kontraktów danych, zobacz Using Data Contracts (Używanie kontraktów danych).

Należy również zastosować DataMemberAttribute element do dowolnego pola, właściwości lub zdarzenia zawierającego wartości, które mają być serializujące. Stosując metodę DataContractAttribute, jawnie włączysz DataContractSerializer funkcję w celu serializacji i deserializacji danych.

Uwaga

Możesz zastosować element DataMemberAttribute do pól prywatnych. Należy pamiętać, że dane zwrócone przez pole (nawet jeśli są prywatne) są serializowane i deserializowane, a tym samym mogą być wyświetlane lub przechwycone przez złośliwego użytkownika lub procesu.

Aby uzyskać więcej informacji na temat kontraktów danych, zobacz tematy wymienione w temacie Using Data Contracts (Korzystanie z kontraktów danych).

Kontakty dot. danych

Kontrakt danych to abstrakcyjny opis zestawu pól o nazwie i typie danych dla każdego pola. Kontrakt danych istnieje poza dowolną pojedynczą implementacją, aby umożliwić współdziałanie usług na różnych platformach. Jeśli dane przekazywane między usługami są zgodne z tą samą umową, wszystkie usługi mogą przetwarzać dane. To przetwarzanie jest również nazywane luźno powiązanym systemem. Kontrakt danych jest również podobny do interfejsu w tym, że kontrakt określa sposób dostarczania danych, aby można je było przetworzyć przez aplikację. Na przykład kontrakt danych może wywołać typ danych o nazwie "Person", który ma dwa pola tekstowe o nazwach "FirstName" i "LastName". Aby utworzyć kontrakt danych, zastosuj element DataContractAttribute do klasy i zastosuj DataMemberAttribute element do wszystkich pól lub właściwości, które muszą być serializowane. W przypadku serializacji dane są zgodne z kontraktem danych, który jest niejawnie wbudowany w typ.

Uwaga

Kontrakt danych różni się znacząco od rzeczywistego interfejsu w zachowaniu dziedziczenia. Interfejsy są dziedziczone przez wszystkie typy pochodne. W przypadku zastosowania DataContractAttribute klasy bazowej typy pochodne nie dziedziczą atrybutu ani zachowania. Jeśli jednak typ pochodny ma kontrakt danych, składowe danych klasy bazowej są serializowane. Należy jednak zastosować element DataMemberAttribute do nowych składowych w klasie pochodnej, aby można je było serializować.

Dokumenty schematu XML i narzędzie SvcUtil

Jeśli wymieniasz dane z innymi usługami, musisz opisać umowę danych. Dla bieżącej DataContractSerializerwersji schematu XML może służyć do definiowania kontraktów danych. (Inne formy metadanych/opisu mogą być używane w tym samym celu). Aby utworzyć schemat XML z poziomu aplikacji, użyj narzędzia ServiceModel Metadata Tool (Svcutil.exe) z opcją wiersza polecenia /dconly . Gdy dane wejściowe narzędzia są zestawem, domyślnie narzędzie generuje zestaw schematów XML, które definiują wszystkie typy kontraktów danych znalezionych w tym zestawie. Z drugiej strony można również użyć narzędzia Svcutil.exe, aby utworzyć definicje klas Języka Visual Basic lub C#, które są zgodne z wymaganiami schematów XML korzystających z konstrukcji, które mogą być wyrażone przez kontrakty danych. W takim przypadku opcja wiersza polecenia /dconly nie jest wymagana.

Jeśli dane wejściowe do narzędzia Svcutil.exe są schematem XML, domyślnie narzędzie tworzy zestaw klas. Jeśli zbadasz te klasy, okaże się, że zastosowano klasę DataContractAttribute . Za pomocą tych klas można utworzyć nową aplikację do przetwarzania danych, które muszą być wymieniane z innymi usługami.

Możesz również uruchomić narzędzie względem punktu końcowego zwracającego dokument WSDL (Web Services Description Language), aby automatycznie wygenerować kod i konfigurację w celu utworzenia klienta programu Windows Communication Foundation (WCF). Wygenerowany kod zawiera typy oznaczone symbolem DataContractAttribute.

Ponowne używanie istniejących typów

Kontrakt danych ma dwa podstawowe wymagania: stabilną nazwę i listę elementów członkowskich. Stabilna nazwa składa się z identyfikatora URI (URI) przestrzeni nazw i nazwy lokalnej kontraktu. Domyślnie podczas stosowania DataContractAttribute klasy do klasy używa ona nazwy klasy jako nazwy lokalnej i przestrzeni nazw klasy (poprzedzonej prefiksem "http://schemas.datacontract.org/2004/07/") jako identyfikatora URI przestrzeni nazw. Wartości domyślne można zastąpić, ustawiając Name właściwości i Namespace . Przestrzeń nazw można również zmienić, stosując ContractNamespaceAttribute element do przestrzeni nazw. Użyj tej funkcji, jeśli masz istniejący typ, który przetwarza dane dokładnie zgodnie z wymaganiami, ale ma inną przestrzeń nazw i nazwę klasy z kontraktu danych. Przesłaniając wartości domyślne, można ponownie użyć istniejącego typu i mieć serializowane dane zgodne z kontraktem danych.

Uwaga

W dowolnym kodzie można użyć słowa DataContract zamiast dłuższego DataContractAttribute.

Wersje

Kontrakt danych może również pomieścić nowsze wersje samego siebie. Oznacza to, że gdy nowsza wersja kontraktu zawiera dodatkowe dane, dane są przechowywane i zwracane do nadawcy nietkniętego. W tym celu zaimplementuj IExtensibleDataObject interfejs.

Aby uzyskać więcej informacji na temat przechowywania wersji, zobacz Przechowywanie wersji kontraktu danych.