Typy obsługiwane przez serializator kontraktu danych

Program Windows Communication Foundation (WCF) używa jako domyślnego DataContractSerializer aparatu serializacji, aby przekonwertować dane na format XML i przekonwertować kod XML z powrotem na dane. Jest DataContractSerializer przeznaczony do serializacji typów kontraktów danych. Obsługuje jednak wiele innych typów, które mogą być uważane za niejawne kontrakty danych. Poniżej znajduje się pełna lista typów, które można serializować:

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

Poniżej przedstawiono listę ograniczeń dotyczących używania niektórych typów w scenariuszach w trybie częściowego zaufania:

  • Aby serializować lub deserializować typ implementujący ISerializable częściowo zaufany kod przy użyciu parametru DataContractSerializerSerializationFormatter i UnmanagedCode .

  • W przypadku uruchamiania kodu WCF w trybie częściowego zaufania serializacja i deserializacja readonly pól (zarówno public i private) nie jest obsługiwana. Jest to spowodowane tym, że wygenerowany il jest niemożliwy do zweryfikowania i dlatego wymaga podwyższonych uprawnień.

  • DataContractSerializer Oba elementy i XmlSerializer są obsługiwane w środowisku częściowego zaufania. Jednak użycie obiektu DataContractSerializer podlega następującym warunkom:

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

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

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

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

  • Typy implementujące IObjectReference zgłaszają wyjątek w częściowo zaufanym środowisku, ponieważ GetRealObject metoda wymaga uprawnień zabezpieczeń [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)].

Dodatkowe uwagi dotyczące serializacji

Następujące reguły dotyczą również typów obsługiwanych przez serializator kontraktu danych:

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

  • Typy wartości dopuszczalnych wartości 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 XmlSerializer przez usługi sieci Web i ASP.NET. 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ć program WCF, aby używać XmlSerializer elementu DataContractSerializerzamiast .

  • Typ DBNull jest traktowany w specjalny sposób. Jest to pojedynczy typ, a po deserializacji deserializator uwzględnia ograniczenie singleton i wskazuje wszystkie DBNull odwołania do pojedynczego wystąpienia. Ponieważ DBNull jest to typ możliwy do serializacji, wymaga SerializationFormatter uprawnień.

Zobacz też