Typy obsługiwane przez serializator kontraktu danych

Windows Communication Foundation (WCF) używa DataContractSerializer jako domyślnego aparatu serializacji, aby przekonwertować dane do formatu XML i przekonwertować kod XML z powrotem na dane. DataContractSerializerJest przeznaczony do serializacji typów kontraktu danych . Jednak obsługuje ona wiele innych typów, które można traktować jako niejawny kontrakt danych. Poniżej znajduje się kompletna lista typów, które mogą być serializowane:

Ograniczenia dotyczące używania niektórych typów w trybie częściowego zaufania

Poniżej znajduje się lista ograniczeń w przypadku korzystania z określonych typów w scenariuszach częściowego trybu zaufania:

  • Aby serializować lub deserializować typ, który implementuje ISerializable kod częściowo zaufany przy użyciu DataContractSerializer wymaganych SerializationFormatter UnmanagedCode uprawnień i.

  • Podczas uruchamiania kodu WCF w trybie częściowego zaufania , serializacja i deserializacja readonly pól (zarówno public i private ) nie jest obsługiwana. Wynika to z faktu, że wygenerowany kod IL jest niemożliwy do sprawdzenia i w związku z tym wymaga podniesionych uprawnień.

  • Zarówno, DataContractSerializer jak i XmlSerializer są obsługiwane w środowisku częściowej relacji zaufania. Jednak użycie programu DataContractSerializer podlega następującym warunkom:

    • Wszystkie [DataContract] typy możliwe do serializacji muszą być publiczne.

    • Wszystkie możliwe do serializacji [DataMember] pola lub właściwości w [DataContract] typie muszą być publiczne i odczytywane i zapisywane. Serializacja i deserializacja readonly pól nie jest obsługiwana w przypadku uruchamiania programu WCF w częściowo zaufanej aplikacji.

    • [Serializable] / ISerializable] Model programowania nie jest obsługiwany w środowisku częściowej relacji zaufania.

    • Znane typy muszą być określone w kodzie lub konfiguracji na poziomie komputera ( Machine.config ). Nie można określić znanych typów w konfiguracji na poziomie aplikacji ze względów bezpieczeństwa.

  • Typy, które implementują IObjectReference zgłoszenie wyjątku w środowisku częściowo zaufanym, ponieważ GetRealObject Metoda wymaga uprawnienia zabezpieczeń [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)] .

Dodatkowe uwagi dotyczące serializacji

Poniższe reguły mają zastosowanie również do typów obsługiwanych przez serializator kontraktu danych:

  • Typy ogólne są w pełni obsługiwane przez serializator kontraktu danych.

  • Typy wartości null są w pełni obsługiwane przez serializator kontraktu danych.

  • Typy interfejsów są traktowane jako Object lub, w przypadku interfejsów kolekcji, jako typy kolekcji.

  • Obsługiwane są zarówno struktury, jak i klasy.

  • Program DataContractSerializer nie obsługuje modelu programowania używanego przez XmlSerializer usługi i ASP.NET sieci Web. W szczególności nie obsługuje atrybutów takich jak XmlElementAttribute i XmlAttributeAttribute . Aby włączyć obsługę tego modelu programowania, należy przełączyć WCF w celu użycia XmlSerializer zamiast DataContractSerializer .

  • DBNullTyp jest traktowany w specjalny sposób. Jest to typ pojedynczy, a po deserializacji deserializowany odnosi się do ograniczenia singleton i wskazuje wszystkie DBNull odwołania do pojedynczego wystąpienia. Ponieważ DBNull jest typem możliwym do serializacji, wymaga SerializationFormatter uprawnień.

Zobacz też