Dela via


Typer som stöds av Data Contract Serializer

Windows Communication Foundation (WCF) använder DataContractSerializer som standard serialiseringsmotor för att konvertera data till XML och konvertera XML tillbaka till data. DataContractSerializer Är utformad för att serialisera datakontraktstyper. Det stöder dock många andra typer, som kan anses ha ett implicit datakontrakt. Följande är en fullständig lista över typer som kan serialiseras:

Begränsningar för att använda vissa typer i partiellt förtroendeläge

Följande är en lista över begränsningar när du använder vissa typer i partiella säkerhetslägesscenarier:

  • För att serialisera eller deserialisera en typ som implementeras ISerializable i delvis betrodd kod med hjälp av DataContractSerializer kräver SerializationFormatter och UnmanagedCode behörigheter.

  • När du kör WCF-kod i läget Partiellt förtroende stöds inte serialisering och deserialisering av readonly fält (både public och private). Det beror på att den genererade IL:en inte kan verifieras och därför kräver utökade behörigheter.

  • DataContractSerializer Både och XmlSerializer stöds i en partiell förtroendemiljö. Användning av DataContractSerializer är dock föremål för följande villkor:

    • Alla serialiserbara [DataContract] typer måste vara offentliga.

    • Alla serialiserbara [DataMember] fält eller egenskaper i en [DataContract] typ måste vara offentliga och läsa/skriva. Serialisering och deserialisering av readonly fält stöds inte när WCF körs i ett delvis betrott program.

    • Programmeringsmodellen [Serializable]/ISerializable] stöds inte i en partiell förtroendemiljö.

    • Kända typer måste anges i kod- eller datornivåkonfiguration (Machine.config). Kända typer kan inte anges i konfiguration på programnivå av säkerhetsskäl.

  • Typer som implementerar IObjectReference utlöser ett undantag i en delvis betrodd miljö eftersom GetRealObject metoden kräver säkerhetsbehörigheten [SecurityPermission(SecurityAction.LinkDemand, Flags=SecurityPermissionFlag.SerializationFormatter)].

Ytterligare anteckningar om serialisering

Följande regler gäller även för typer som stöds av Data Contract Serializer:

  • Generiska typer stöds fullt ut av datakontraktsserialiseraren.

  • Typer av null-värden stöds fullt ut av datakontraktsserialiseraren.

  • Gränssnittstyper behandlas antingen som Object eller, när det gäller samlingsgränssnitt, som samlingstyper.

  • Både strukturer och klasser stöds.

  • DataContractSerializer stöder inte den programmeringsmodell som används av XmlSerializer webbtjänsterna och ASP.NET. I synnerhet stöder den inte attribut som XmlElementAttribute och XmlAttributeAttribute. För att aktivera stöd för den här programmeringsmodellen måste WCF växlas för att använda XmlSerializer i stället för DataContractSerializer.

  • Typen DBNull behandlas på ett speciellt sätt. Det är en singleton-typ, och vid deserialisering respekterar deserialiseraren singleton-begränsningen och pekar alla DBNull referenser till singleton-instansen. Eftersom DBNull det är en serialiserbar typ kräver SerializationFormatter den behörighet.

Se även